2012-11-29 121 views
9

如果某個特定項目存在(我的情況爲MachineId,id爲2),如何檢查我的對象數組?檢查JavaScript對象中是否存在值

[{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}] 

我嘗試這樣做:

if (index instanceof machineIds.MachineID) { 
    alert('value is Array!'); 
} else { 
    alert('Not an array'); 
} 

回答

11

在跨瀏覽器的方式,你可以使用它jQuery.grep()方法:

var item = $.grep(machineIds, function(item) { 
    return item.MachineID == index; 
}); 

if (item.length) { 
    alert("value is Array!"); 
} 
5

理解的解決辦法是循環的陣列上方,並檢查每一個最簡單的。

var match; 
for (var i = 0; i < yourArray.length; i++) { 
    if (yourArray[i].MachineId == 2) 
     match = yourArray[i]; 
} 

請注意,如果有多個匹配項目,這將返回最後一個。你也可以穿着這個功能。

function findByMachineId(ary, value) { 
    var match; 
    for (var i = 0; i < ary.length; i++) { 
     if (ary[i].MachineId == value) 
      match = ary[i]; 
    } 
    return match; 
} 
+0

對於指定的數據,你應該比較''2「'而不是'2'。 –

+0

如果搜索值是數字,我將無法工作。 – VisioN

+0

或者只是刪除其中的'='標誌 –

1

您可以使用此條件:

if (arr.filter(function(v){return this.MachineID == 2;}).length > 0) 
+0

不適用於IE瀏覽器<= 8 [嘆氣] –

+0

@SalmanA但它看起來如此時尚:( –

3

恕我直言,你不需要第三方庫像jQuery或迭代循環遍歷數組。 有JavaScript Array some method這就是我們在這裏所需要的。

var yourArray = [{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}]; 

var params = {searchedID: "2", elementFound: null}; 
var isCorrectMachineID = function(element) { 
    if (element.MachineID == this.searchedID); 
     return (this.elementFound = element); 
    return false; 
}; 

var isFound = yourArray.some(isCorrectMachineID, params) 

陣列some方法接受兩個參數:

  • 回調 - 函數來測試每一個元素。
  • thisObject - 執行回調時使用的對象。

回調函數沒有加上迭代代碼,使用thisObject參數,你甚至可以返回調用者找到的元素或更多的數據。 如果這樣的元素被發現,some立即返回true

http://jsfiddle.net/gu8Wq/1/

+0

在Chrome 46中試過了),在原型中看不到它,這個功能真的適用於所有瀏覽器嗎? –

+0

請看看這裏:http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.17和這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some#Browser_compatibility – freedev

1

老問題,在這一點上,但這裏是一個使用Array.find一個ES6的解決方案:

let machine2 = machines.find((machine) => machine.id === '2'); 
if (machine2) { 
    // ... 
} 
+0

請記住,這不適用於所有IE和一半移動瀏覽器(截至2016年11月):[MDN Array.find瀏覽器兼容性](https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find #Browser_compatibility) – Zanshin13

+1

當然,如果你使用的是ES6,你應該使用Babel(或者一些類似的轉譯器。) – ericsoco

0
var item = [{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}]; 

var newItem = item.filter(function(i) { 
    return i.MachineID == 2; //it will return an object where MachineID matches with 2 
}); 

console.log(newItem); // will print [{"MachineID":"2","SiteID":"20"}] 
+1

請描述你的代碼的工作或使用自我解釋性的評論! –