有没有办法比较两个数组并在满足条件时推送到空数组?
说我有一个对象数组。我需要遍历对象数组,获取ID;然后将该ID与不同的数组进行比较。然后,如果它们匹配,则将该数组中的值推送到空数组?
数组1:
[{
"addon_service": {
"id": "f6f28cb5-78ad-4ec7-896d-16462b8202fd",
"name": "papertrail"
},
"app": {
"id": "199a1f26-b8e2-43f6-9bab-6e7a6c685ec2",
"name": "mdda-mobiledocdelivery-stg"
}
}]
数组2
[{
"app": {
"id": "199a1f26-b8e2-43f6-9bab-6e7a6c685ec2"
},
"stage": "staging",
}]
我需要将Array 1 app.ID与Array 2 app.id相匹配。如果它们匹配,请检查应用程序处于哪个阶段(分段,开发或生产)。然后将Array 1 addon_service.name推送到staging develpment或 生产数组取决于应用程序处于什么阶段。我认为它很简单,只是无法理解它。
我认为这是一个措辞不佳的问题。
答案 0 :(得分:1)
您可以使用哈希表进行查找和舞台,并使用对象来收集匹配项。
var array1 = [{ "addon_service": { "id": "f6f28cb5-78ad-4ec7-896d-16462b8202fd", "name": "papertrail" }, "app": { "id": "199a1f26-b8e2-43f6-9bab-6e7a6c685ec2", "name": "mdda-mobiledocdelivery-stg" } }],
array2 = [{ "app": { "id": "199a1f26-b8e2-43f6-9bab-6e7a6c685ec2" }, "stage": "staging", }],
hash = Object.create(null),
result = {};
array2.forEach(function (a) {
hash[a.app.id] = a.stage;
});
array1.forEach(function (a) {
if (hash[a.app.id]) {
result[hash[a.app.id]] = result[hash[a.app.id]] || [];
result[hash[a.app.id]].push(a.addon_service.name);
}
})
console.log(result);

答案 1 :(得分:0)
我认为这样做会。
$.each(app1, function(key, value){
$.each(app2, function(k, v){
if(value.app.id == v.app.id){// find apps with the same `id`
if(v[v.stage]){// check if the `stage` array already exists.
v[v.stage].push(value.addon_service)
}else{
v[v.stage] = [value.addon_service];
}
}
});
});
app1
是您问题中的第一个数组,app2
是第二个数组。