объединить два массива в один результирующий массив - PullRequest
1 голос
/ 07 апреля 2020
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}];

И мне также было интересно, был ли мой массив2 также массивом объектов со странным именем ключа, но в результирующем массиве я хочу хорошее имя ключа, например

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 ]

2 голосов
/ 07 апреля 2020

Вы можете сделать что-то вроде следующего (предполагая одинаковую длину для обоих массивов):

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 голос
/ 07 апреля 2020

попробуйте использовать метод 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)
1 голос
/ 07 апреля 2020

Чтобы упростить задачу:

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

возможно, это может решить вашу проблему.
вы также можете использовать простое значение для l oop для array1 вместо функции forEach () или map () .

1 голос
/ 07 апреля 2020

простая чистая функция:

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');
1 голос
/ 07 апреля 2020

Это следующее будет работать для обоих ваших сценариев ios:

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);
1 голос
/ 07 апреля 2020

Попробуйте это ниже:

Если массив2 - это просто список:

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

Если массив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['weirdKey']
                        }
                    });
                    return item_1
                });

                console.log(array1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...