javascript - 合并 2 个数组,更新值
问题描述
在我的减速器中,我从我的 API 中提取结果,我想将此数组与存储中的持久数据(如果存在)结合起来,数据中唯一需要覆盖的字段是bookMarked
、totalScore
和completed
。如果它们不同,我如何比较数组并覆盖所需的属性?
做这个的最好方式是什么?
let arrayFromAPI= [
{
bookMarked: false,
completed: false,
totalScore: 50,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 1
},
{
bookMarked: false,
completed: false,
totalScore: 50,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 2
}
];
let arrayFromPersist = [
{
bookMarked: true,
completed: false,
totalScore: 50,
completed: true,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 1
},
{
bookMarked: true,
completed: false,
totalScore: 50,
completed: true,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 2
}
];
解决方案
您可以使用过滤器并根据属性 ID 合并arrayFromAPI
响应中的所有值,arrayFromPersist
因为它必须在两个数组中相同才能替换新值arrayFromAPI
let arrayFromAPI= [
{
bookMarked: false,
completed: false,
totalScore: 500,
current: 250,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 1
},
{
bookMarked: false,
completed: false,
totalScore: 750,
current: 870,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 2
}
];
let arrayFromPersist = [
{
bookMarked: true,
completed: false,
totalScore: 50,
completed: true,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 1
},
{
bookMarked: true,
completed: false,
totalScore: 50,
completed: true,
current: 0,
description:
"<p>Lorem ipsum culpa qui officia deserunt mollit anim id est laborum.</p>",
icon: "male-urinary-catheterisation",
id: 2
}
];
function merge(a, b, prop){
var reduced = a.filter(function(aitem){
return ! b.find(function(bitem){
return aitem[prop] === bitem[prop];
});
});
return reduced.concat(b);
}
console.log(merge(arrayFromPersist, arrayFromAPI, "id"))
推荐阅读
- r - 合并两列中的值以覆盖 R 中同一行中的 NA
- go - go-smtp,无法通过 gmail 发送电子邮件,获取 EOF
- r - 为什么 fit_transform 和 transform 会产生不同的结果?
- python - '(?=' 和 ')' 在这里做什么?
- php - 使编辑表单在多个选择框中显示选定的值,它选择数据但将数据加倍
- linux - 跨行比较文件值
- android - Android Q - 用户在应用设置中删除 uri 的持久权限。如何再次请求许可?
- angular - 如何仅在一个特定的 NgModule 中添加 http 拦截器(没有延迟加载)?
- windows - 使用 CMake 构建的 Qt 应用程序在 Windows 中编译但不运行
- excel - Excel公式跳转到特定单元格