【发布时间】:2021-10-05 08:18:06
【问题描述】:
假设我有两个 Object 数组,
let oldBookDetails = [
{'name':'Harry pottar','amount':10, is_modified: false},
{'name':'LOTR','amount':20, is_modified: false},
{'name':'dune','amount':15, is_modified: false}
]
let newBookDetails = [
{'name':'Harry pottar','amount':15},
{'name':'LOTR','amount':20},
{'name':'HR','amount':15}
]
let bookModified = []
我想通过比较 newBookDetails 和 oldBookDetails 来创建新的 Object 数组,
并检查是否有任何名称被删除 newDetails,不要推入 bookModified 数组,
如果数量已更改,则使用 is_modified: true 将 newBookDetails 对象推入 bookModified,如果 newBookDetails 数量相同,则使用 is_modified:false 推入 bookModified 数组。
为此,我尝试如下:
newBookDetails.forEach((el) => {
oldBookDetails.forEach((ele) => {
if(Object.values(el).indexOf(el.name) > -1) {
if(el.amount === ele.amount) {
bookModified.push(el)
}else if(el.amount != ele.amount) {
el.is_modified = true
bookModified.push(el)
}
} else if(Object.values(el).indexOf(el.name) === -1) {
//this loops as all are not equal....i am stuck from this part.
}
})
})
预期的 O/P:
console.log(newBookDetails)
[
{'name':'Harry pottar','amount':15, is_modified: true},
{'name':'LOTR','amount':20, is_modified: false},
{'name':'HR','amount':15, is_modified: true}
]
如果有人需要任何进一步的信息,请告诉我。
【问题讨论】:
-
Object.values(el).indexOf(el.name) > -1正在检查当前的el对象是否具有位于el中的名称属性值 - 这将永远是正确的,因为您正在从对象中获取值,并且然后检查该值是否在同一个对象中。您可能想要比较两个对象的名称:ele.name === el.name。你的else if也可以变成else(甚至完全删除)
标签: javascript node.js arrays