【问题标题】:Searching through an array of an array of objects if a property exists?如果存在属性,则搜索对象数组的数组?
【发布时间】:2016-06-03 08:41:26
【问题描述】:

因此,基于 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}]
]

每个嵌套数组都是我推送到 items 数组的 ajax 响应对象。

所以我想知道如何查看数组对象的数组以查看项目的 id 已经为 1,并且我可以排除 items[0][0] 中 id 为 1 的对象被渲染。

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

请让我知道这是否有意义。

【问题讨论】:

  • 您只需要检查一下,还是需要一些东西来防止某些事情发生?
  • 您可以使用array.find 仅返回对象,或使用array.some 仅指示其存在并从那里开始工作。请注意find 是 ES6。

标签: javascript arrays ajax object


【解决方案1】:

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

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】:

    您可以使用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);

    【讨论】:

      【解决方案3】:

      如果找到给定的 id,您可以使用 Array#some 遍历数组并返回 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));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-14
        • 2011-03-17
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多