2014-01-06 186 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,因爲你實際上是從數組中刪除項目而不是用新數組覆蓋。這可能會有所作爲。 –