如何过滤对象并更新过滤的内容? JavaScript
How to filter object and updated what is filtered? JavaScript
我想过滤对象并更新过滤后的结果。
例如:
// global object (parent)
let globalObj = {
id: 123,
name: "No Name",
attributes: [{
keyA: "Key",
keyB: "Keys 2",
}]
}
我有上面的全局父对象,就是接受数据并保存的任务。 (就像 Redux 中的商店)
let updatedObj = {
id: 123,
name: "New Name",
attributes: [{
keyA: "New Key",
}]
}
好吧,现在我想用新的copare过滤全局对象,过滤它并只更新更改的内容,其他的必须取消..
结果我想得到这样的东西:
// global object (parent after update)
let globalObj = {
id: 123,
name: "New Name",
attributes: [{
keyA: "New Key",
keyB: "Keys 2",
}]
}
我该怎么做?
谢谢!
最简单的方法是为此使用 deep merge
包。
您可以使用deepmerge or lodash
merge
如果您确切知道要更新哪些密钥,您可以简单地使用 Object.assign 用于 每个单独的级别和密钥 。 Object.assign 做了浅层 copy/merge.
第一级可以用Object.assign
let mergedObject = Object.assign({}, globalObj, updatedObj)
这将正确合并顶级键,但属性会出错。因此,您需要为此降低一级。
merged.attributes = globalObj.attributes.map( (item, index) =>
Object.assign({}, item, updatedObj.attributes[i])
)
这 只有在数组大小相同的情况下才有效 。这非常重要。
合并 2 个数组的含义并不明确。有很多问题使数组合并变得非常重要:
- 如何添加新项目
- 如何识别匹配的元素,以便知道要更新的元素
- 你是根据指数做出这个决定(像我一样),还是使用其他策略
这在很大程度上取决于您如何唯一标识数组元素,而这本身就很重要。
我想过滤对象并更新过滤后的结果。
例如:
// global object (parent)
let globalObj = {
id: 123,
name: "No Name",
attributes: [{
keyA: "Key",
keyB: "Keys 2",
}]
}
我有上面的全局父对象,就是接受数据并保存的任务。 (就像 Redux 中的商店)
let updatedObj = {
id: 123,
name: "New Name",
attributes: [{
keyA: "New Key",
}]
}
好吧,现在我想用新的copare过滤全局对象,过滤它并只更新更改的内容,其他的必须取消..
结果我想得到这样的东西:
// global object (parent after update)
let globalObj = {
id: 123,
name: "New Name",
attributes: [{
keyA: "New Key",
keyB: "Keys 2",
}]
}
我该怎么做?
谢谢!
最简单的方法是为此使用 deep merge
包。
您可以使用deepmerge or lodash
merge
如果您确切知道要更新哪些密钥,您可以简单地使用 Object.assign 用于 每个单独的级别和密钥 。 Object.assign 做了浅层 copy/merge.
第一级可以用Object.assign
let mergedObject = Object.assign({}, globalObj, updatedObj)
这将正确合并顶级键,但属性会出错。因此,您需要为此降低一级。
merged.attributes = globalObj.attributes.map( (item, index) =>
Object.assign({}, item, updatedObj.attributes[i])
)
这 只有在数组大小相同的情况下才有效 。这非常重要。
合并 2 个数组的含义并不明确。有很多问题使数组合并变得非常重要:
- 如何添加新项目
- 如何识别匹配的元素,以便知道要更新的元素
- 你是根据指数做出这个决定(像我一样),还是使用其他策略
这在很大程度上取决于您如何唯一标识数组元素,而这本身就很重要。