比较 getJSON 回复的 JSON 个对象并在删除元素后输出新对象

Compare JSON objects replied by getJSON and output new object after removing elements

我有两个 api 调用使用 getJSON:

回复 JSON 对象
$.getJSON(url1).then(function(data) {
        $.each(data,function(index,item) 
        {
            console.log(item);
        });
    })
    .fail(function() {
        console.log("error");
    }); 

遗嘱相同但不同url 说第一个函数会回复 json data:

[
{"_id":"1","caller_id":"234567","user_id":"5"},
{"_id":"2","caller_id":"345678","user_id":"3"},
{"_id":"3","caller_id":"456789","user_id":"4"},
{"_id":"4","caller_id":"123456","user_id":"1"}
]

第二个将回复:

[
{"telefono":"234567"},
{"telefono":"111111"},
{"telefono":"456789"},
{"telefono":"222222"},
{"telefono":"345678"},
{"telefono":"333333"},
{"telefono":"123456"},
]

如何比较两个 JSON 对象并在删除元素后将结果输出到新对象,其中:

json1.caller_id = json2.telefono

检查结果:

[
{"telefono":"111111"},
{"telefono":"222222"},
{"telefono":"333333"},
]

编辑:

基于@gaetanoM 的回答:这段代码对我有用:

$.when(
    $.getJSON("/api_1"),
    $.getJSON("/api_2")
).done(function(data1, data2) {
    console.log(data1[0]);
    console.log(data2[0]);
    var x = data1[0].reduce((a, e) => {a[ e.caller_id] = true; return a}, {});
   datos = data2[0].filter((e) => x[e.telefono] == undefined);
   //    .... what ever
});

您可以将第一个对象数组缩减为 key/value 对,其中:

  • 键是caller_id值
  • 值为真或其他值

在此之后,您可以过滤第二个数组以查找第一个数组:

var firstobj = [
    {"_id":"1","caller_id":"234567","user_id":"5"},
    {"_id":"2","caller_id":"345678","user_id":"3"},
    {"_id":"3","caller_id":"456789","user_id":"4"},
    {"_id":"4","caller_id":"123456","user_id":"1"}
];
var secondobj = [
    {"telefono":"234567"},
    {"telefono":"111111"},
    {"telefono":"456789"},
    {"telefono":"222222"},
    {"telefono":"345678"},
    {"telefono":"333333"},
    {"telefono":"123456"},
];
var x = firstobj.reduce((a, e) => {a[ e.caller_id] = true; return a}, {});
secondobj = secondobj.filter((e) => x[e.telefono] == undefined);

console.log(secondobj);