比较对象数组和字符串数组

4

我有两个数组:

第一个数组是字符串数组:

let array1 = ['value1', 'value2', 'value3', 'value4', 'value5']

第二个是对象数组,它可以变化,这意味着有时我会拥有所有值,有时只有一些值且它们不会被排序。类似于这样:
array2 = [
{
property1: 'value1',
property2: 42,
property3: 'some other value'
},

{
property1: 'value3',
property2: 342,
property3: 'some other value'
},

{
property1: 'value5',
property2: 422,
property3: 'some other value'
}
]

我需要创建另一个数组。如果第一个数组中的value1在数组2中,我需要将其推到新创建的数组的property2中,否则我需要推送0。项目的顺序需要与数组1相同,这意味着最终我将拥有一个看起来像这样的数组:
array3 = [42, 0, 342, 0, 422]

谢谢

我在stackoverflow上查找了,但是没有一个解决方案适用于我


1
你尝试了什么?请展示一下你的尝试。 - 0stone0
2个回答

4
  • 使用Array#reduce,遍历 array2 并更新一个以 property1 为键、以 property2 为值的 Map
  • 使用Array#map,遍历array1并返回上述 Map 中每个项目的值,如果没有则返回 0

const 
  array1 = ['value1', 'value2', 'value3', 'value4', 'value5'],
  array2 = [ { property1: 'value1', property2: 42, property3: 'some other value' }, { property1: 'value3', property2: 342, property3: 'some other value' }, { property1: 'value5', property2: 422, property3: 'some other value' } ];

const valueMap = array2.reduce((map, { property1, property2 }) => map.set(property1, property2), new Map);

const array3 = array1.map(value => valueMap.get(value) ?? 0);

console.log(array3);


2

所以你想要找到所有的property2值,其中property1值存在于另一个数组中...
使用forEachpush将结果添加到你的结果数组(array3)中即可:

const array1 = ['value1', 'value2', 'value3', 'value4', 'value5']

const array2 = [{
    property1: 'value1',
    property2: 42,
    property3: 'some other value'
  },

  {
    property1: 'value3',
    property2: 342,
    property3: 'some other value'
  },

  {
    property1: 'value5',
    property2: 422,
    property3: 'some other value'
  }
]


let array3 = []
array2.forEach(item => {
  if (array1.includes(item.property1)) {
    array3.push(item.property2)
  }
})
console.log(array3);

正如其他评论所说,请在发布问题时记得包含您尝试过的事情。

附言:在发布代码时要小心,有一些逗号丢失,导致语法无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接