【问题标题】:How do I check if some object is not present in an array? [duplicate]如何检查数组中是否不存在某些对象? [复制]
【发布时间】:2018-07-18 05:49:35
【问题描述】:

我有一个对象数组,比如

[
  {
    "name": "Name 1",
    "id": "1245"
  },
  {
    "name": "Name 2",
    "id": "9788"
  },
  {
    "name": "Name 3",
    "id": "5694"
  },
  {
    "name": "Name 4",
    "id": "4523"
  },
  {
    "name": "Name 5",
    "id": "4567"
  }
]

我需要检查数组是否包含具有 ID 的对象(比如说“1111”)。如果在数组内的任何对象中都没有找到 ID,则将新对象(例如,{"name":"Test 0","id":"1111"})放在数组的开头。

PS:除了array.unshift(newObj),还有其他方法可以达到目的吗?

编辑:好的。我确实尝试过使用 array.indexOf(),但它似乎只适用于值而不是对象。我也尝试循环遍历数组,但也没有用。我不能使用 ES6。

【问题讨论】:

  • 我得到 -1 是为了什么?
  • 我没有对你投反对票,但这可能是因为缺乏自己的研究。这里已经有一个类似的问题:stackoverflow.com/questions/22844560/… 虽然它使用的是 ES6 的一部分 Array.prototype.some(因此对您不可用),但您始终可以实现 polyfill。
  • ..同样,unshift 替代品(例如[newObj].concat(array))也是如此。在这里讨论:stackoverflow.com/questions/6195729/… unshift 应该是最快的。
  • @IvanSivak 你是说不能用 ES5 完成吗?
  • 我找到了@IvanSivak 在 cmets 中提到的解决方案。

标签: javascript arrays object ecmascript-5


【解决方案1】:

没有 ES6 并假设您的对象名为 users,如果它不存在,您可以有条件地添加一个:

function addUser(name, id) {

    users.forEach(function(user) {
        if (user.id === id) {
            return user;
        }
    });

    var newUser = {"name": name,"id": id}

    users.unshift(newUser);

    return newUser;

}

【讨论】:

  • 关闭,原帖者想在数组的开头添加新数据,而不是在末尾。
  • 啊,我错过了。已编辑
【解决方案2】:

使用减少

function hasId(array, id){
    return array.reduce(function(sum, element){
        return sum || element.id === id;
    }, false);
}

if(hasId(array, 1111)){
    array.splice(0, 0, newElement);  
}

有 1000 种方法可以做到这一点。该解决方案适用于 es5,效率不高,因为它贯穿整个阵列。最快的方法是在 for 循环中执行,然后返回第一个找到的,但这看起来更漂亮。

使用 for 循环

function hasId(array, id){
   for(var i=0; i<array.length;i++){
       if(array[i].id === id){
           return true;
       }
   }
   return false;
}

if(hasId(array, 1111)){
    array.splice(0, 0, newElement);  
}

这是最快的方法,一找到第一个id就停止

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2013-05-20
    • 1970-01-01
    • 2016-08-21
    • 2011-10-13
    • 1970-01-01
    • 2018-12-23
    • 2019-09-09
    相关资源
    最近更新 更多