Javascript 比较两个数组并相应地更改属性
我有两个数组,分别命名为prodArray和orderArray,如下所示Javascript 比较两个数组并相应地更改属性,javascript,arrays,arraylist,filter,Javascript,Arrays,Arraylist,Filter,我有两个数组,分别命名为prodArray和orderArray,如下所示 prodArray = [ {productId : 1 , productName: 'abc', checked: false}, {productId : 2 , productName: 'def', checked: false}, {productId : 3 , productName: 'ghi', checked: false}, {productId : 4 , productName: 'j
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}
]
我想比较这两种方法并创建一个结果数组,如下所示
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)));
有人能帮忙吗?谢谢:)您可以使用map()
和find()
。以下是步骤:
- 应用
prodArraymap()
具有所有先前属性的对象,但更改选中的返回
- 在
上应用orderArray
,并将结果设置为从return返回的对象的find()
属性checked
让prodArray=[
{productId:1,productName:'abc',选中:false},
{productId:2,productName:'def',选中:false},
{productId:3,productName:'ghi',选中:false},
{productId:4,productName:'jkl',选中:false}
]
让orderArray=[
{productId:1,productName:'abc'},
{productId:4,productName:'jkl'}
]
设res=prodArray
.map(x=>({…x,
选中:布尔(orderArray.find)(a=>
a、 productId==x.productId&&a.productName===x.productName))}
))
console.log(res)
您可以创建一个新集合()
变量,该变量包含所有产品ID
。使用map
循环遍历每个prodArray
,并使用检查集合是否具有productId
var prodArray=[{“productId”:1,“产品名称”:“abc”,“checked”:false},{“productId”:2,“产品名称”:“def”,“checked”:false},{“productId”:3,“产品名称”:“ghi”,“checked”:false},{“productId”:4,“产品名称”:“jkl”,“checked”:false}];
var orderArray=[{“productId”:1,“productName”:“abc”},{“productId”:4,“productName”:“jkl”}]
让productId=newset(orderArray.map(o=>o.productId));
让result=prodArray.map(o=>({…o,选中:productIDs.has(o.productId)}));
控制台日志(结果)代码>您可以获取集
并为结果集分配一个新对象
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=新集合(orderArray.map(({productId}=>productId)),
result=prodArray.map(o=>Object.assign({},o,{checked:orders.has(o.productId)}));
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
@NabaragPaul您应该接受您满意的答案。