如果属性存在,则搜索对象数组的数组?

时间:2016-06-03 08:41:26

标签: javascript arrays ajax object

因此,基于ajax返回,我将每个唯一搜索的对象数组推送到另一个数组。从这里,我正在迭代最近的搜索数组并渲染对象。完美地做到这一点

我现在要做的是,每次新搜索时,检查结果的id ===是否为数组对象数组中的现有id。

items = [
        [{id:1, name:blue},{id:21, name:red}],
        [{id:5, name:yellow},{id:232, name:green}]
        [{id:1, name:blue},{id:9, name:red}]
]

每个嵌套数组都是一个ajax响应对象,我将其推送到items数组。

所以我想知道如何查看数组对象数组,看看项目的id是1,我可以在项目[0] [0]中排除id为1的对象。

我想也许是items.includes但不确定这是否有效?

如果有任何意义,请告诉我。

3 个答案:

答案 0 :(得分:0)

您可以使用Array#some迭代数组,如果找到了给定的ID,则返回true

function checkId(id, array) {
    return array.some(function (a) {
        return a.some(function (b) {
            return b.id === id;
        });
    });
}

var items = [[{ id: 1, name: 'blue' }, { id: 21, name: 'red' }], [{ id: 5, name: 'yellow' }, { id: 232, name: 'green' }],[{ id: 1, name: 'blue' }, { id: 9, name: 'red' }]];

console.log(checkId(1, items));
console.log(checkId(42, items));

ES6

function checkId(id, array) {
    return array.some(a => a.some(b => b.id === id));
}

var items = [[{ id: 1, name: 'blue' }, { id: 21, name: 'red' }], [{ id: 5, name: 'yellow' }, { id: 232, name: 'green' }],[{ id: 1, name: 'blue' }, { id: 9, name: 'red' }]];

console.log(checkId(1, items));
console.log(checkId(42, items));

答案 1 :(得分:0)

如果您想要排除对象,可以过滤数组。

var filtered = items.map(function(arr) {
    return arr.filter(function(obj) {
        return obj.id !== 1
    });
});

过滤后将成为:

[
    [{id:21, name:red}],
    [{id:5, name:yellow}, {id:232, name:green}],
    [{id:9, name:red}]
]

答案 2 :(得分:0)

您可以使用forEach循环,如果有指定ID的对象,您可以使用splice将其删除

var items = [
  [{id:1, name:'blue'},{id:21, name:'red'}],
  [{id:5, name:'yellow'},{id:232, name:'green'}],
  [{id:1, name:'blue'},{id:9, name:'red'}]
]

function removeObj(ar, id) {
  ar.forEach(function(e) {
    e.forEach(function(a, i) {
      if(a.id == id) e.splice(i, 1);
    });
  });
}

removeObj(items, 1);
console.log(items);