比较2个json文件和删除对象

时间:2018-06-08 17:43:48

标签: javascript arrays json local-storage

我有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 中。

2 个答案:

答案 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));