将数组合并到对象数组中

时间:2018-06-14 17:09:10

标签: javascript api

我正在使用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 )

我可以使用哪种方法吗?

4 个答案:

答案 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] };

}