如何比较2个数组,并在React中留下一个相似的值?



我有两个数组:

array1 = 
[{package_id: 4, is_checked: 1, images: Array(0)}]
array2 = 
[
{package_id: 3, width: "80", length: "120", height: "200", weight: "222", …},
{package_id: 4, width: "210", length: "70", height: "76", weight: "83", …}
]

我想得到的结果是:

array3 = [{package_id: 4, width: "210", length: "70", height: "76", weight: "83", …}]

您可以看到,我删除了package_id不匹配的对象。我怎样才能做到这一点呢?

您可以使用Array.filter,以便仅保留package_idarray_1中至少一个元素匹配的元素。

const array1 = [{
package_id: 4,
is_checked: 1,
images: Array(0),
}];
const array2 = [{
package_id: 3,
width: '80',
length: '120',
height: '200',
weight: '222',
},
{
package_id: 4,
width: '210',
length: '70',
height: '76',
weight: '83',
},
];
const filteredData = array2.filter(({
package_id,
}) => array1.some(x => x.package_id === package_id));
console.log(filteredData);

假设用array1 package_id过滤array2

array3 = array2.filter(e1 => array1.some(e2 => e1.package_id == e2.package_id))

您可以首先将array1 id存储在Set中,以避免在筛选时嵌套迭代,因为Set具有方法0(1)复杂性。这将比调用filter并为每个array2元素迭代array1提供更好的性能:

const ids = new Set()
array1.forEach(({package_id}) => ids.add(package_id))
const array3 = array2.filter(({package_id}) => ids.has(package_id))

相关内容

最新更新