Создать новый массив объектов на основе двух массивов в Javascript - PullRequest
0 голосов
/ 04 мая 2020

Я хочу получить массив объектов, созданный из двух простых массивов:

const array1 = [20, 2, 35, 86]
const array2 = [8, 86, 15, 23, 35, 44]

Ожидаемый результат:

const result = [
  { id: 20, value: false },
  { id: 2, value: false },
  { id: 35, value: true },
  { id: 86, value: true },
];

Важна длина массива1. Поэтому мне нужно найти совпадающие значения в обоих массивах, как показано в ожидаемом результате.

Большое спасибо за вашу помощь.

Ответы [ 7 ]

3 голосов
/ 04 мая 2020

Вы можете комбинировать карту с:

array1.map(i =>  ({id: i, value: array2.includes(i)}))
1 голос
/ 04 мая 2020

Создайте набор из второго массива:

const a2set = new Set(array2);

, затем сопоставьте свой первый массив:

array1.map(v1 => ({id:v1, value: a2set.has(v1)}))
1 голос
/ 04 мая 2020

Должно быть просто. L oop через первый массив, используя Array.map и вернуть объект.

const array1 = [20, 2, 35, 86]
const array2 = [8, 86, 15, 23, 35, 44]
const result = array1.map(i => ({ id: i, value: array2.includes(i) }))
console.log(result)
0 голосов
/ 04 мая 2020

Попробуйте следующее. Если важна производительность или если массивы могут содержать большое количество элементов, я бы рекомендовал использовать наборы для повышения производительности поиска.

const array1 = [20, 2, 35, 86]
const array2 = [8, 86, 15, 23, 35, 44]

const result = array1.map(element => {
    return {
        id: element,
        value: array2.includes(element)
    };
})
0 голосов
/ 04 мая 2020

Попробуйте просто для l oop:

 
const array1 = [20, 2, 35, 86];
const array2 = [8, 86, 15, 23, 35, 44];
var res = [];
for (var i = 0; i < array1.length; i++) {
  if (array2.includes(array1[i])) {
    res.push({ id: array1[i], value: true });
  } else {
    res.push({ id: array1[i], value: false });
  }
}
console.log(res);
0 голосов
/ 04 мая 2020

Вы можете использовать массив indexOf, чтобы определить, находится ли элемент во втором массиве.

const array1 = [20, 2, 35, 86];
const array2 = [8, 86, 15, 23, 35, 44];

let output = [];
array1.forEach((number) => {
  output.push({
    id: number,
    value: array2.indexOf(number) !== -1
  });
});

console.log(output);
0 голосов
/ 04 мая 2020

Запустите al oop для первого массива и проверьте, существует ли этот элемент во втором массиве или нет.

Если элемент существует, pu sh это массив, содержащий объекты с флагом true или иначе как false.

const array1 = [20, 2, 35, 86]
const array2 = [8, 86, 15, 23, 35, 44]

var objArray = []
array1.forEach(function(elem){
    objArray.push({
      id : elem,
      value : array2.indexOf(elem) != -1 ? true : false
    });
});

console.log(objArray);
...