我有2个JSON文件: A 位于远程服务器上, B 位于本地存储中。
我希望,在页面加载时,jQuery可以比较两个文件,如果一个对象在 B 文件中,但不在 A 中,则要从本地存储中删除的对象。
var fileA = '[{"ID":"1","foo":"bar"},{"ID":"3","foo":"bar"}]'; //Remote file
var fileB = '[{"ID":"2","foo":"bar"},{"ID":"3","foo":"bar"}]'; //localStorage
var jsonA = JSON.parse(fileA);
var jsonB = JSON.parse(fileB);
jsonA.forEach(function(allA) {
jsonB.forEach(function(allB) {
if (allA.ID != allB.ID) {
var i = jsonB.findIndex(mydata => mydata.ID === allA.ID);
if (i !== -1) {
jsonB.splice(i, 1);
if (jsonB.length === 0) {}
localStorage.setItem('panier', JSON.stringify(jsonB));
}
}
})
})
我要做的是从本地存储中删除ID:2
,因为它不在 A 中。
答案 0 :(得分:0)
尝试以下方法:
var fileA = '[{"ID":"1","foo":"bar"},{"ID":"3","foo":"bar"}]';//Remote file
var fileB = '[{"ID":"2","foo":"bar"},{"ID":"3","foo":"bar"}]'; //localStorage
var jsonA = JSON.parse(fileA);
var jsonB = JSON.parse(fileB);
jsonB = jsonB.filter((o) => jsonA.findIndex((obj)=> obj.ID === o.ID)!=-1 );
console.log(jsonB);
答案 1 :(得分:0)
请检查以下代码:
提示:避免使用nested forEach loop
来提高效率。
var fileA = '[{"ID":"1","foo":"bar"},{"ID":"3","foo":"bar"}]';//Remote file
var fileB = '[{"ID":"2","foo":"bar"},{"ID":"3","foo":"bar"}]'; //localStorage
var jsonA = JSON.parse(fileA);
var jsonB = JSON.parse(fileB);
// Temporary array to hold all id in file a
var arrA = [];
//Push all id in file A to arrA
jsonA.forEach(a => {
arrA.push(a.ID);
});
jsonB.forEach((b,index) => {
// check if arrA has b.ID
if (arrA.indexOf(b.ID) == -1){
jsonB.splice(index,1)
}
})
console.log(jsonB)
localStorage.setItem('panier', JSON.stringify(jsonB));