gpt4 book ai didi

javascript - 使用javascript使用两个数组中的不同值创建对象数组

转载 作者:行者123 更新时间:2023-12-03 10:17:11 24 4
gpt4 key购买 nike

我的问题有点复杂。我有两个数据数组:

var arr = [
{title: "foo", namesIndices: [0,1]},
{title: "bar", namesIndices: [2]},
{title: "baz", namesIndices: [3,4]}
];

var names = [
{name: "John", website: "someUrl"},
{name: "Mike", website: "someUrl"},
{name: "Jane", website: "someUrl"},
{name: "Ali", website: "someUrl"},
{name: "Robert", website: "someUrl"}
];

其中,namesIndices 将引用名称数组中的索引,该索引将与该人及其头衔相对应。为了将人名和网站与正确的标题相匹配来制作此数组:

var person = [
{name: "John", title: "foo", website: "someUrl"},
{name: "Mike", title: "foo", website: "someUrl"},
{name: "Jane", title: "bar", website: "someUrl"},
{name: "Ali", title: "baz", website: "someUrl"},
{name: "Robert", title: "baz", website: "someUrl"}
];

我必须循环第一个数组,然后循环 arr.namesIndices:

var person = [];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].namesIndices.length; j++) {
var personObj = {};
personObj.title= arr[i].title;
personObj.name = names[arr[i].namesIndices[j]].name;
personObj.website= names[arr[i].namesIndices[j]].website;
person.push(personObj);
}
}

有没有办法在没有嵌套循环的情况下做到这一点?

最佳答案

如果您愿意,您可以使用 reduce()map() 来完全避免显式循环。

var arr = [
{title: "foo", namesIndices: [0,1]},
{title: "bar", namesIndices: [2]},
{title: "baz", namesIndices: [3,4]}
];

var names = [
{name: "John", website: "someUrl"},
{name: "Mike", website: "someUrl"},
{name: "Jane", website: "someUrl"},
{name: "Ali", website: "someUrl"},
{name: "Robert", website: "someUrl"}
];

var person = arr.reduce(function (accumulator, titleAndIndices, arrIndex) {
var newEntries = titleAndIndices.namesIndices.map(function (index) {
var rv = names[index];
rv.title = arr[arrIndex].title;
return rv;
});
return accumulator.concat(newEntries);
}, []);

console.log(person);

关于javascript - 使用javascript使用两个数组中的不同值创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29810169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com