我正在使用API数据,我正在尝试构建一个组合多个数据数组的对象。
当前阵列:
let name = [{name: "John"},{name: "Jane"},{name: "Doe",}]
let arr1 = ['bar', 'foo', 'foobar']
let arrX = ...
期望的结果:
let desiredOutcome = [
{
name: "John",
arr1: "bar", ...
},
{
name: "Jane",
arr1: "foo", ...
},
{
name: "Doe",
arr1: "foobar", ...
}]
我一直在尝试使用Object.assign(),但我没有运气:
var merge = Object.assign(obj, arr1 )
我可以使用哪种方法吗?
答案 0 :(得分:1)
使用.map()
添加每个元素。
let name = [{name: "John"},{name: "Jane"},{name: "Doe",}]
let arr1 = ['bar', 'foo', 'foobar']
let result = name.map((a,i)=>{a.arr1 = arr1[i]; return a})
console.log(result)
答案 1 :(得分:0)
您可以使用let name = [{name: "John"},{name: "Jane"},{name: "Doe",}]
let arr1 = ['bar', 'foo', 'foobar'];
var result = name.map((o,i) =>Object.assign({"arr1" : arr1[i]},o));
console.log(result);
尝试以下方法:
{{1}}
答案 2 :(得分:0)
对于任意数组的数组,您可以使用包含对象数组和值数组的数组,并使用short hand properties保留数组的名称以及使用{添加到结果集的值{3}}
var names = [{ name: "John" }, { name: "Jane" }, { name: "Doe" }],
arr1 = ['bar', 'foo', 'foobar'],
arrX = [1, 2, 3],
result = [names, { arr1 }, { arrX }]
.reduce((r, o) =>
(([k, a]) => a.map((v, i) => Object.assign({}, r[i], { [k]: v })))(Object.entries(o)[0])
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:0)
可能会迟到但我会就如何使用.map
提供一些其他说明:
.map
方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
该方法将一个回调作为参数。回调本身可以采用预定义的参数。这里我们将使用前两个:
currentValue:e
索引:i
基本上,map方法通过将循环数组的每个元素(此处为 name
)与给定的返回值(此处为 {{1})相关联(字面映射)来工作。 } 强>)。映射只是两个数组之间的双射。
{name: e.name, arr1: arr1[i]}
上的另一个词:
这是一种称为箭头功能的简写语法。它类似于定义回调函数,如下所示:
(e,i) => ({name: e.name, arr1: arr1[i]})
完整代码段如下:
function(e,i) {
return { name: e.name, arr1: arr1[i] };
}