我有两个名为prodArray和orderArray的数组,如下所示:
prodArray = [
{productId : 1 , productName: 'abc', checked: false},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: false}
]
orderArray = [
{productId : 1 , productName: 'abc'},
{productId : 4 , productName: 'jkl'}
]
我想比较这两者,并创建一个如下所示的结果数组
resultArray = [
{productId : 1 , productName: 'abc', checked: true},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: true}
]
到目前为止,我所尝试的是没有运气的
let resultArray = Array.from(new Set(prodArray .filter(f => {
return orderArray.some(o => {
return f.productId === o.productId ;
});
}).filter(x => x.checked === true)));
有人可以帮忙吗?谢谢:)
答案 0 :(得分:3)
您可以使用map()
和find()
。步骤如下:
map()
prodArray
return
一个具有所有先前属性的对象,但是更改了checked
find()
上应用orderArray
,并将结果设置为返回对象的checked
属性。
let prodArray = [
{productId : 1 , productName: 'abc', checked: false},
{productId : 2 , productName: 'def', checked: false},
{productId : 3 , productName: 'ghi', checked: false},
{productId : 4 , productName: 'jkl', checked: false}
]
let orderArray = [
{productId : 1 , productName: 'abc'},
{productId : 4 , productName: 'jkl'}
]
let res = prodArray
.map(x => ({...x,
checked:Boolean(orderArray.find(a =>
a.productId === x.productId && a.productName === x.productName))}
))
console.log(res)
答案 1 :(得分:3)
您可以使用Set
并为结果集分配一个新对象。
var prodArray = [{ productId: 1 , productName: 'abc', checked: false }, { productId: 2 , productName: 'def', checked: false }, { productId: 3 , productName: 'ghi', checked: false }, { productId: 4 , productName: 'jkl', checked: false }],
orderArray = [{ productId: 1 , productName: 'abc' }, { productId: 4 , productName: 'jkl' }],
orders = new Set(orderArray.map(({ productId }) => productId)),
result = prodArray.map(o => Object.assign({}, o, { checked: orders.has(o.productId) }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
您可以创建一个包含所有new Set()
的{{1}}变量。使用productId
遍历每个map
,并检查集合是否具有prodArray
productId