Javascript 比较两个数组并相应地更改属性

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和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}
]
我想比较这两种方法并创建一个结果数组,如下所示

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()
。以下是步骤:

  • 应用
    map()
    prodArray
  • 返回
    具有所有先前属性的对象,但更改选中的
  • orderArray
    上应用
    find()
    ,并将结果设置为从return返回的对象的
    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您应该接受您满意的答案。