2014-01-06 146 views
0

的内部阵列我有一个数组,其被格式化为例如:搜索对象

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

它包含大约25的对象,但这种可以改变。我的程序获得一个ID,它是一个整数,它必须执行的操作查看客户端数组,然后查找具有指定ID的对象,然后从数组中删除该对象。

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

回答

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' } ] 
+0

任何使用括号符号表示符号的理由? –

+0

@EvanTrimboli我刚刚更新了:) – thefourtheye

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支持。
+0

ES5方法直到9才打到IE ;-) –

+0

@cookiemonster感谢您指出这一点,我已更正了该帖子。 –

+0

+1,因为你实际上是从数组中删除项目而不是用新数组覆盖。这可能会有所作为。 –