将两个数组合并为一个结果数组

时间:2020-04-07 10:08:28

标签: javascript arrays angular

let array1 = [{name:"ABC",add:"XYZ"},{name:"PQR",add:"CCC"}];

let array2 = [1,2]

我希望输出为

array1=[{name:"ABC",add:"XYZ",num:1},{name:"PQR",add:"CCC",num:2}];

我还想知道我的array2是否也是键名奇怪的对象数组,但是在结果数组中我想要一个像这样的好键名

let array1 = [{name:"ABC",add:"XYZ"},{name:"PQR",add:"CCC"}];

let array2=[{weirdKey:1},{weirdKey:2}];

但是结果数组将很整洁

array1=[{name:"ABC",add:"XYZ",num:1},{name:"PQR",add:"CCC",num:2}];

6 个答案:

答案 0 :(得分:2)

您可以执行以下操作(假设两个数组的长度相同):

array1 = array1.map((el, i) => {
    el.num = array2[i];
    return el;
});

修改: 对于第二种情况,如果不确定weirdKey是什么,可以执行以下操作:

array1 = array1.map((el, i) => {
    el.num = Object.values(array2[i])[0];
    return el;
});

答案 1 :(得分:1)

在下面尝试一下:

如果array2只是一个列表:

let array1 = [{name:"ABC",add:"XYZ"},{name:"PQR",add:"CCC"}];
                let array2 = [1,2];



                array1 = array1.map(function (item_1, index_1) {
                    array2.map(function (item_2, index_2) {
                        if (index_1 == index_2) {
                            item_1['num'] = item_2
                        }
                    });
                    return item_1
                });

                console.log(array1);

如果array2是对象列表,请尝试以下操作:

array1 = array1.map(function (item_1, index_1) {
                    array2.map(function (item_2, index_2) {
                        if (index_1 == index_2) {
                            item_1['num'] = item_2['weirdKey']
                        }
                    });
                    return item_1
                });

                console.log(array1);

答案 2 :(得分:1)

以下内容适用于您的两种情况:

let array1 = [{ name: "ABC", add: "XYZ" }, { name: "PQR", add: "CCC" }];
let array2 = [{ weirdKey: 1 }, { weirdKey: 2 }];

array1.forEach((element, i) => {
  array1[i].num = array2[i].weirdKey ? array2[i].weirdKey : array2[i];
});

console.log(array1);

答案 3 :(得分:1)

简单的纯函数:

const combineToArrayFn =
  (array1, array2, key = '') =>
    array1.map((item, i) => ({...item, num: array2[i][key] || array2[i]}));

const newArray = combineToArrayFn(array1, array2);

const newArray1 = combineToArrayFn(array1, array2, 'weirdKey');

答案 4 :(得分:1)

使其更简单:

array1.forEach((e,index)=>{
 array1[index]["num"]=array2[index].weirdKey;
});

也许可以解决您的问题。
您还可以在array1上使用简单的for循环,而不是使用forEach()或map()函数。

答案 5 :(得分:1)

尝试对数组使用map()方法

// without weirdKey
let array1 = [{ name: "ABC", add: "XYZ" }, { name: "PQR", add: "CCC" }]
let array2 = [1, 2];

array1.map((item, index) => item.num = (array2[index].weirdKey) ? array2[index].weirdKey : array2[index])
console.log(array1)

// with weirdKey same function
let array3 = [{ name: "ABC", add: "XYZ" }, { name: "PQR", add: "CCC" }]
let array4 = [{ weirdKey: 1 }, { weirdKey: 2 }];

array3.map((item, index) => item.num = (array4[index].weirdKey) ? array4[index].weirdKey : array4[index])
console.log(array3)