搜索对象数组

时间:2014-01-06 03:02:53

标签: javascript arrays node.js

我有一个数组,格式如下:

var clients = [{
    "id": 1, 
    "hash": 5c5fbbb047984ca8eec6dc7a3d994c09, 
    "more": {...}
  }, 
  {
    "id": 2,
    "hash": 620628ce37817a94476d55e55a543bee,
    "more": {...}
  }, 
  {...}, 
  {...}];

它包含大约25个对象,但这可能会改变。我的程序获取一个ID,这是一个整数,它必须在客户端数组中查找,找到具有指定ID的对象,然后从数组中删除该对象。

考虑到可能存在相对大量的对象,最好,最有效的方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.filter功能,就像这样

var clients = [{"id": 1, "hash": "5c5fbbb047984ca8eec6dc7a3d994c09"},
               {"id": 2, "hash": "620628ce37817a94476d55e55a543bee"}];
var idToRemove = 1;

clients = clients.filter(function(currentObject) {
    return currentObject.id !== idToRemove;
});

console.log(clients);

<强>输出

[ { id: 2, hash: '620628ce37817a94476d55e55a543bee' } ]

答案 1 :(得分:1)

您可以遍历数组并删除具有给定id的条目。

function removeClient(clients, id) {
  for(var i = 0; i < clients.length; i++) {
    if(clients[i].id === id) {
      clients.splice(i, 1);
      return;
    }
  }
}

您也可以使用Array.prototype.filter函数,但我更喜欢这种迭代解决方案有两个原因:

  • 一旦找到并删除了客户端,它就会退出,而不是总是遍历整个阵列。
  • 适用于IE8及更低版本,而Array.prototype.filter是一种ECMAScript 5功能,在IE9之前IE不支持。