根据Javascript中的两个数组创建对象的新数组

时间:2020-05-04 08:57:15

标签: javascript arrays loops javascript-objects

我想从两个简单的数组中获得创建的对象数组:

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 },
];

array1的长度很重要。因此,我需要在两个数组中找到匹配的值,如预期结果所示。

非常感谢您的帮助。

7 个答案:

答案 0 :(得分:3)

您可以将地图与包含项结合使用

array1.map(i =>  ({id: i, value: array2.includes(i)}))

答案 1 :(得分:1)

应该很简单。使用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)

答案 2 :(得分:1)

从第二个数组创建一个集合:

const a2set = new Set(array2);

然后映射您的第一个数组:

array1.map(v1 => ({id:v1, value: a2set.has(v1)}))

答案 3 :(得分:0)

针对第一个数组启动循环,然后检查该元素是否存在于第二个数组中。

如果元素存在,则将其推入包含带有标志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);

答案 4 :(得分:0)

您可以使用数组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);

答案 5 :(得分:0)

尝试一个简单的for循环:

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

答案 6 :(得分:0)

尝试以下方法。如果性能很重要,或者数组可能包含大量元素,我会考虑使用set以获得更好的查找性能。

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