2009-11-18 90 views
20

我用JavaScript的數組對象的工作這樣:使用jQuery inArray的JavaScript對象數組

var IssuesArray = [{"ID" : "1", "Name" : "Issue1"}, 
        {"ID" : "2", "Name" : "Issue2"}, 
        {"ID" : "3", "Name" : "Issue3"}]; 

我的最終努力嘗試當我知道的ID,以從數組中刪除一個對象目的。我試圖使用代碼是這樣的:

$.grep(IssuesArray, function(n, i) { 
    return i != $.inArray("2", IssuesArray); 
}); 

因此,這表明,我試圖使用jQuery的grep按指數(I),而我試圖通過使用檢索到刪除一個元素jQuery inArray。當然,上面的代碼不會工作,因爲「2」應該對應於數組中的一個項目,它們都是JavaScript對象(對象永遠不會等於「2」)。我需要這樣的東西:

$.inArray(javascriptObject.Name=="2", IssuesArray); 

有沒有人使用inArray獲取JavaScript對象的索引,使用該對象中的一個字段的值過任何成功的?任何幫助,將不勝感激。謝謝。

更新/澄清:一些人對我的問題感到困惑,但我收到了一個可行的答案。我正在使用:

IssuesArray = $.grep(IssuesArray, function(n) { 
    return n.ID != "2"; 
}); 

我覺得我在想太深,當時解決方案真的很容易。我只是想從數組中刪除一個JavaScript對象,只要我知道該對象中某個特定屬性的值即可。上面的解決方案使用jQuery的grep來返回數組中除了ID ==「2」的任何對象之外的所有內容。像往常一樣,感謝您的快速回答。一對夫婦的答案是很好的解決方案,可以使用(例如使用「拼接」),但這種解決方案似乎是最簡單的。再次感謝。

+0

我不知道你想達到什麼目的? – Greg 2009-11-18 20:49:12

+0

不知道在所有的.grep方法 - 這是偉大的,對於較小的陣列(順便說一句,爲什麼它被稱爲grep的?);它會複製數組,但是對於更大的數據集,從原始數組中移除元素可能會更好,但這很大程度上取決於您要實現的目標:) – Patonza 2009-11-18 22:03:42

回答

33

n是你的列表項,那麼這樣的事情應該做的工作:

$.grep(issuesArray, function(n) { return n.ID != "2"; }) 
+0

這似乎正在做我需要做的事情。謝謝! – 2009-11-18 21:09:42

+1

也可以使用嚴格的比較,!==而不是!= – 2013-05-29 09:02:35

6

不知道如果我理解正確你的問題,但我會做到:

$.each(IssuesArray, function(i, item){ 
    if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1); 
}); 
+0

+1非常優雅的解決方案。 – 2009-11-18 20:55:12

0

沒有使用jQuery或其他框架:

var newArray = []; 
var i=0, len=IssuesArray.length; 
var bad_id = "2"; // or whatever 
while(i<len) { 
    if(IssuesArray[i].ID !== bad_id) { 
    newArray.push(IssuesArray[i++]); 
    } 
} 
0

簡化?

var IssuesArray = { 
    1: "Issue1", 
    2: "Issue2", 
    3: "Issue3" 
}; 
var issue2 = IssuesArray[2]; 

爲什麼單個散列會執行散列列表?

+0

我不想在我的問題中涉及太多細節,但我在「問題」中的數據不僅僅是名稱和ID。總共有5個領域,所以一個哈希值將不足。謝謝你的想法。 – 2009-11-18 21:09:08

2
var spliceID = function(id, arr) { 
    $(arr).each(function(i, el) { 
     if (el.ID == id) { 
      arr.splice(i,1); 
      return false; 
     } 
    }); 
    return arr; 
} 

console.log(spliceID('2', IssuesArray));