【发布时间】:2021-08-29 05:03:43
【问题描述】:
我有两个 JSON 文件 - 一个从服务器获取 (data),另一个是本地 (database)。
我正在尝试遍历服务器 json,将其与本地 json 进行比较,然后将任何新对象附加到本地文件中。这样,当脚本第二次运行时,这些新项目已被附加并且可以跳过。
问题:
目前当它在初始时间之后运行时,因为它检查a-a, a-b, a-c, b-a, b-b, b-c...,它将跳过初始结果,但随后添加其他选项。
我正在使用的 js:
let additions = [];
data.forEach(item1 => {
database.filter(item2 => {
if( !(item1.value === item2.value && item1.country === item2.country) ) {
additions.push(item1)
}
})
});
示例/期望:
data = [
{ value: "qwert", country: "US" },
{ value: "asdfg", country: "CA" },
{ value: "zxcvb", country: "GB" }
]
database = [
{ value: "poiuy", country: "CA" },
{ value: "qwert", country: "US" }
]
然后在循环和检查之后,它会导致以下(初始运行):
output = [
{ value: "poiuy", country: "CA" },
{ value: "qwert", country: "US" },
{ value: "asdfg", country: "CA" },
{ value: "zxcvb", country: "GB" }
]
当我下次运行循环时,如果数据发生了变化:
data = [
{ value: "poiuy", country: "CA" },
{ value: "wsxcd", country: "AU" },
{ value: "rfvbg", country: "NZ" },
{ value: "zxcvb", country: "FR" }
]
我期待这个:
output = [
{ value: "poiuy", country: "CA" },
{ value: "qwert", country: "US" },
{ value: "asdfg", country: "CA" },
{ value: "zxcvb", country: "GB" },
{ value: "wsxcd", country: "AU" },
{ value: "rfvbg", country: "NZ" },
{ value: "zxcvb", country: "FR" }
]
但我收到了这个:
output = [
{ value: "poiuy", country: "CA" },
{ value: "qwert", country: "US" },
{ value: "asdfg", country: "CA" },
{ value: "zxcvb", country: "GB" },
{ value: "poiuy", country: "CA" },
{ value: "poiuy", country: "CA" },
{ value: "poiuy", country: "CA" },
{ value: "wsxcd", country: "AU" },
{ value: "wsxcd", country: "AU" },
{ value: "wsxcd", country: "AU" },
{ value: "rfvbg", country: "NZ" },
{ value: "rfvbg", country: "NZ" },
{ value: "rfvbg", country: "NZ" },
{ value: "zxcvb", country: "FR" },
{ value: "zxcvb", country: "FR" },
{ value: "zxcvb", country: "FR" }
]
任何帮助都将不胜感激,因为我似乎无法弄清楚它只会附加唯一的项目,而不是逐个项目。
【问题讨论】:
-
一个懒惰的黑客来快速完成这个是使用
Set -
@SamridhTuladhar 这行不通,因为包含相同值的对象仍然具有不同的身份。例如。
new Set([{foo: 'bar'}, {foo: 'bar'}, 1, 1])将产生一个带有{foo: 'bar'}两次 的集合,并且正如预期的那样,产生一个 1。
标签: javascript node.js unique