比较 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);
我有两个 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);