2015-04-30 81 views
-1

我有一個形式的數組數組存在價值:如何檢查是否使用javascript

"localValues" : [ 
    { 
     "localValId" : "8KfbEozjdQYAefuHF", 
     "localProductCode" : "291105300", 
     "localMarkupVal" : "2.8", 
     "localMembersPrice" : "3344" 
    }, 
    { 
     "localValId" : "qdCY6Kkvc7e8m4yxw", 
     "localProductCode" : "291105300234", 
     "localMarkupVal" : "2.8432", 
     "localMembersPrice" : "3344333" 
    }, 
    { 
     "localValId" : "i827Eve8zBexRSTSP", 
     "localProductCode" : "291105300", 
     "localMarkupVal" : "2.8432", 
     "localMembersPrice" : "899" 
    } 

我試圖返回localProductCode的位置:

var a = localValues; 

var location = a.indexOf('291105300'); 

console.log('location: ' + location) 

然而,這返回-2,這是不正確的,因爲該代碼確實存在於數組中。有人可以幫忙嗎?先謝謝你!

+1

我想你是誤會的indexOf做什麼。 indexOf方法只適用於簡單的值。如果你只有一個localProductCode數組,那麼indexOf就可以工作。如果你想讓你的例子工作,你必須迭代每個數組的子對象,並對localProductCode屬性進行字符串比較。老實說,如果「localProductCode」是你的密鑰,你可能會更好的更改數據結構。相反,您可以將本地值鎖定。 –

+1

'indexOf'返回很多東西,但*從不* **'-2' **! – Bergi

回答

0

下面的代碼會發現你正在尋找的價值的指標。如果該值不在數組中,這將返回-1。取自this SO post。我剛剛在最後添加了警報。

var myArray = [0,1,2]可能會變成var myArray = localValues;您的情況,那麼您可以將needle設置爲您正在查找的值。

var indexOf = function(needle) { 
 
    if(typeof Array.prototype.indexOf === 'function') { 
 
     indexOf = Array.prototype.indexOf; 
 
    } else { 
 
     indexOf = function(needle) { 
 
      var i = -1, index = -1; 
 

 
      for(i = 0; i < this.length; i++) { 
 
       if(this[i] === needle) { 
 
        index = i; 
 
        break; 
 
       } 
 
      } 
 

 
      return index; 
 
     }; 
 
    } 
 

 
    return indexOf.call(this, needle); 
 
}; 
 

 
var myArray = localValues, 
 
    needle = 3, 
 
    index = indexOf.call(myArray, needle); // 1 
 
    alert(index);

編輯:注意到一個有點晚了,你可能會尋找數組中的KEY。

function GetObjectKeyIndex(obj, keyToFind) { 
 
    var i = 0, key; 
 
    for (key in obj) { 
 
     if (key == keyToFind) { 
 
      return i; 
 
     } 
 
     i++; 
 
    } 
 
    return null; 
 
} 
 

 
// Now just call the following 
 

 
GetObjectKeyIndex(localValues, "localProductCode");

上面代碼段(如果存在),或null如果具有這樣的名稱的密鑰可以被找到,則返回的ID。

+1

您可以修改示例以便它可以與OP數據(而不是'[0,1,2]')一起使用嗎?否則這是無用的。 – Bergi

1

該陣列不包含'291105300'

,而不是直接對搜索字符串,你需要找到與該值的對象,對於一個給定的關鍵:

function hasMatch(array, key, value) { 
    var matches = array.filter(function(element) { 
    return element[key] === value; 
    }); 

    return (matches.length > 0); 
} 

hasMatch(localValues, 'localProductCode', '291105300') // true 
1
console.log(JSON.stringify(localValues).indexOf('291105300') != -1 ? true : false); 
+1

除了可怕的'? true:false'部分,這不能可靠地適用於所有值。它會找到例如即使在數組中屬性值不存在的情況下也是如此。 – Bergi

+0

我給你...... – legui

0

要返回所有在那裏的是價值被發現,你可以使用mapfilter索引的數組:

function findValue(data, key, value) { 
    return data.map(function (el, i) { 
     return el[key] === value 
    }).map(function (el, i) { 
     return el === true ? i : null 
    }).filter(function (el) { 
     return el !== null; 
    }); 
} 

findValue(data.localValues, 'localProductCode', '291105300'); // [0, 2] 

DEMO

相關問題