Как перебирать массивы, чтобы объединить их в один объект JavaScript?

#javascript #arrays #for-loop #object

#javascript #массивы #for-цикл #объект

Вопрос:

У меня есть три массива: «кредитор», «имена», «Номера страниц».:

 var lender = [
    [
        { "name": "IFC", "amount": 50 },
        { "name": "ABC", "amount": 10 }
    ],
    [
        { "name": "DEF", "amount": 40 },
        { "name": "GHI", "amount": 100 }
    ]
]

var names = ["Gary", "Neil", "Luke", "Ben"]

var pageNumbers = [["page 0"], ["page 1"]]
 

Я хочу объединить эти три массива в один объект JavaScript, который выглядит следующим образом:

 page 0 = {
    Gary = {
        financiers = {
            name = IFC
        }
    },
    Neil = {
        financiers = {
            name = ABC
        }
    }
}, page 1 = {
    Luke = {
        financiers = {
            name = DEF
        }
    },
    Ben = {
        financiers = {
            name = GHI
        }
    }
}
 

}

Я подумал, что лучшим способом сделать это было бы перебирать массивы и присваивать их предопределенному объекту:

   //Predefined Object
  var lenderObj = {
    "lenders": {
      [pageNumbers]:{
        [names]: {}
      }            
    }

 //Loop
  for (var j = 0; j < pageNumbers.length;j  ) {   
    for (var i = 0; i < names.length; i  ) {
      lenderObj.lenders[pageNumbers[j]] = {
        [names[i]]: {
          financiers:lender[j][i]
        }
      }
    }
  }
 

Но я не получаю правильного результата, кажется, он дает мне только фамилию (Бен), а затем NULL в качестве значения для «финансистов». Кажется, я не могу понять, что не так с тем, что я написал. Любая помощь была бы очень кстати. Спасибо.

Комментарии:

1. Могу я спросить вас, почему pageNumbers двумерный массив? PS вам не хватает = в var pageNumbers [["page 0"],["page 1"]]

2. Упс, спасибо. Номера страниц — это результат другой функции, которая просто возвращает ему многомерность. Я думаю, это не обязательно, если проще не быть.

Ответ №1:

Сделайте это, как показано ниже —

 var lender = [
  [{
      "name": "IFC",
      "amount": 50
    },
    {
      "name": "ABC",
      "amount": 10
    }
  ],
  [{
      "name": "DEF",
      "amount": 40
    },
    {
      "name": "GHI",
      "amount": 100
    }
  ]
];

var names = ["Gary", "Neil", "Luke", "Ben"];

var pageNumbers = [
  ["page 0"],
  ["page 1"]
];
var lenderObj = {
  "lenders": {
  }
}

//Loop
var nameIterator = 0;
for(var i = 0; i < lender.length; i  ) {
    lenderObj.lenders[pageNumbers[i]] = {};  
  var lenderItem = lender[i];
  for(var j = 0; j < lenderItem.length; j  ) {
    lenderObj.lenders[pageNumbers[i]][names[nameIterator]] = {};
    lenderObj.lenders[pageNumbers[i]][names[nameIterator]].financiers = lenderItem[j];
    nameIterator  ;
  }
}
console.log(lenderObj); 

Ответ №2:

Использование forEach и разрушение

 var lender = [
  [
    { name: "IFC", amount: 50 },
    { name: "ABC", amount: 10 },
  ],
  [
    { name: "DEF", amount: 40 },
    { name: "GHI", amount: 100 },
  ],
];

var names = ["Gary", "Neil", "Luke", "Ben"];
var pageNumbers = [["page 0"], ["page 1"]];


const output = { lenders: {} };

pageNumbers.forEach(([page], pi) => {
  output.lenders[page] = {};
  lender[pi].forEach(
    ({ name }, li) =>
      (output.lenders[page][names[2 * pi   li]] = { financiers: { name } })
  );
});

console.log(output);