Home > Net >  Creating new Array of objects with an each function
Creating new Array of objects with an each function

Time:11-19

I am building a web scraper using node/puppeteer/cheerio

Using this I am able to console.log the correct strings. I am struggling to understand if this is possible.

$('table[]')
  .find("tbody > tr > td")
  .each(function (index, element) {
    if ((index   1) % 8 == 0) {
      console.log($(element).text());
      console.log("Start New JSON");
    } else {
      console.log($(element).text());
    }

my output are the following strings

1
2
3
4
5
6
7
8
Start New JSON
9
10
11
12
13
14
15
16
Start New JSON

My Intended Result is:

[
 {
  "A": "1",
  "B": "2",
  "C": "3",
  "D": "4",
  "E": "5",
  "F": "6",
  "G": "7"
  "H": "8"
  },
   {
  "A": "9",
  "B": "10",
  "C": "11",
  "D": "12",
  "E": "13",
  "F": "14",
  "G": "15"
  "H": "16"
  }
]

CodePudding user response:

You can create your case around this solution: Basically replace from your each with reduce.

let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];

// input = $('table[]').find("tbody > tr > td")

let output = input.reduce((arr, value, i) => {
  let remainder = i % 8;

  if (!remainder) {
    arr.push({})
  };
  let obj = arr[arr.length - 1];
  let char = String.fromCharCode(97   remainder);
  obj[char] = value;
  return arr;
}, []);

console.log(output)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

  • Related