#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);