javascript - 比较两个数组并相应地更改属性
问题描述
我有两个名为 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)));
有人可以帮忙吗?谢谢 :)
解决方案
您可以使用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)
推荐阅读
- android - Android中没有角的圆形按钮
- java - 在 JOOQ 中使用 RecordMapper 将派生列映射到 POJO
- string - 字符串操作在 tcsh 中不起作用 - 不理解子程序的变量
- swift - 如何在 Swift 中获取本地化的文件大小单位
- webserver - 如何使用 sd 卡托管 html
- python - 合并对设置为列表
- java - 如何在按下按钮时动态添加和删除多个 EditText 字段?
- python - 无法在列表中调用 max 函数
- javascript - 与函数相比,为什么提升在变量中的工作方式不同?
- bash - 在 Bash 中提交/推送项目之前验证用户是否已将 SSH 密钥添加到 Git Profile