Javascript - 比较两个数组然后按条件推送到新数组

时间:2016-07-26 12:58:42

标签: javascript arrays loops object

有没有办法比较两个数组并在满足条件时推送到空数组?

说我有一个对象数组。我需要遍历对象数组,获取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或 生产数组取决于应用程序处于什么阶段。我认为它很简单,只是无法理解它。

我认为这是一个措辞不佳的问题。

2 个答案:

答案 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是第二个数组。