[英]Remove an item from an array by value
我有一系列項目,例如:
var items = [id: "animal", type: "cat", cute: "yes"]
我正在嘗試刪除與給定 ID 匹配的所有項目。 在這種情況下; animal
我被卡住了! 通過使用更簡單的數組,我可以讓它輕松工作,但這不是我需要的......我還需要按值刪除項目,因為我不希望通過索引引用項目的麻煩。
有沒有我可以使用的 jQuery 方法,我不需要遍歷 items 數組,而是指定一個選擇器?
這是我的 jsFiddle: http : //jsfiddle.net/zafrX/
我不確定按索引引用數組項有多少麻煩。 刪除數組項的標准方法是使用splice 方法
for (var i = 0; i < items.length; i++)
if (items[i] === "animal") {
items.splice(i, 1);
break;
}
當然,您可以將其概括為輔助函數,這樣您就不必在任何地方復制它。
編輯
我剛剛注意到這個不正確的語法:
var items = [id: "animal", type: "cat", cute: "yes"]
你想要這樣的東西:
var items = [ {id: "animal", type: "cat", cute: "yes"}, {id: "mouse", type: "rodent", cute: "no"}];
這會將刪除代碼更改為:
for (var i = 0; i < items.length; i++)
if (items[i].id && items[i].id === "animal") {
items.splice(i, 1);
break;
}
不需要 jQuery 或任何第三方庫,現在我們可以使用新的 ES5 過濾器:
let myArray = [{ id : 'a1', name : 'Rabbit'}, { id : 'a2', name : 'Cat'}];
myArray = myArray.filter(i => i.id !== 'a1');
您可以使用splice
或自己運行刪除。 下面是一個例子:
for (var i = 0; i < items.length; i ++) {
if (items[i] == "animal") {
items.splice(i, 1);
break;
}
}
有一個簡單的方法!
myItems.splice(myItems.indexOf(myItems.find(row => row.id == id)), 1);
演示如下:
// define function function delete_by_id(id) { var myItems = [{ id: 1, type: "cat", cute: "yes" }, { id: 2, type: "rat", cute: "yes" }, { id: 3, type: "mouse", cute: "yes" }]; // before console.log(myItems); myItems.splice(myItems.indexOf(myItems.find(item => item.id == id)), 1); // after console.log(myItems); } // call function delete_by_id(1);
你應該這樣做(確保你有正確的語法......你不能有帶屬性的數組,但對象在{}
,然后你可以通過鍵進行迭代並刪除不需要的鍵):
var items = {id: "animal", type: "cat", cute: "yes"}
var removeItem = "animal"; // or with the ID matching animal...
for(var p in items){
if(items[p] === removeItem)
delete items[p]
}
為了回答您的問題,您不能將 jquery 選擇器應用於 javascript 對象。 避免for
循環的最佳方法是使用$.each (這是一個以更“功能”的方式編寫的循環)。
通過使用對象表示法: http : //jsfiddle.net/jrm2k6/zafrX/2/
var animal1 = {id: "animal", type: "cat", cute: "yes"}
var car2 = {id: "car", type: "pick-up", cute: "no"}
var animal3 = {id: "animal", type: "dog", cute: "yes"}
var removeItem = "animal"; // or with the ID matching animal...
var array_items = []
array_items.push(animal1);
array_items.push(car2);
array_items.push(animal3);
for(var i=0;i<array_items.length;i++){
if(array_items[i].id == removeItem){
array_items.splice(i,1);
}
}
//alert(array_items.length);
哇,這么多想法,但仍然不是我想要的 xD
這將刪除給定值的所有條目並返回刪除的值:
function removeOfArray(val, arr){
var idx;
var ret;
while ((idx = arr.indexOf(val)) > -1){
arr.splice(idx, 1);
ret = val;
}
return ret;
}
我還在這里找到了其他解決方案: 按值從數組中刪除項目
-parray : list of array of object
-pstring :value to remove from the array
-ptag :using which tag we
function removeFromArr (parray,ptag,pstring){ var b =[]; var count = 0; for (var i =0;i<parray.length;i++){ if(pstring != parray[i][ptag]){ b[count] = parray[i]; count++; } } return b; } var lobj = [ { "SCHEME_CODE": "MIP65", "YEARS": "1", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "1.80", "FREQUENCY": "Monthly", "CUST_TYPE": "RETAIL", "GROSS_IR": "1.79" }, { "SCHEME_CODE": "MIP65", "YEARS": "2", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "1.98", "FREQUENCY": "Monthly", "CUST_TYPE": "RETAIL", "GROSS_IR": "1.96" }, { "SCHEME_CODE": "MIP65", "YEARS": "3", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "2.05", "FREQUENCY": "Monthly", "CUST_TYPE": "RETAIL", "GROSS_IR": "2.03" }, { "SCHEME_CODE": "MIP65", "YEARS": "5", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "2.26", "FREQUENCY": "Monthly", "CUST_TYPE": "RETAIL", "GROSS_IR": "2.24" }, { "SCHEME_CODE": "QIP65", "YEARS": "1", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "1.80", "FREQUENCY": "Quarterly", "CUST_TYPE": "RETAIL", "GROSS_IR": "1.79" }, { "SCHEME_CODE": "QIP65", "YEARS": "2", "CURRENCY": "GBP", "MAX_AMT": 200000, "MIN_AMT": 1000, "AER_IR": "1.98", "FREQUENCY": "Quarterly", "CUST_TYPE": "RETAIL", "GROSS_IR": "1.97" }, ] function myFunction(){ var final = removeFromArr(lobj,"SCHEME_CODE","MIP65"); console.log(final); }
<html> <button onclick="myFunction()">Click me</button> </html>
將從對象中刪除
function removeFromArr(parray, pstring, ptag) {
var farr = [];
var count = 0;
for (var i = 0; i < pa.length; i++) {
if (pstring != pa[i][ptag]) {
farr[count] = pa[i];
count++;
}
}
return farr;
}
ES6 解決方案
persons.splice(persons.findIndex((pm) => pm.id === personToDelete.id), 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.