2016-07-02 6 views
0

У меня есть такой массив [HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"]. Я получил это от консоли.Использование indexOf() в массиве Javascript

Я пытаюсь выяснить значение как ниже

var sku = skus_colorcode.indexOf('9620');     
console.log(sku); 

Но она возвращается -1.

Почему я получаю этот результат ??

+1

'.indexOf' смотрит только на числовые индексы. Ваш массив заполнен нечисловыми свойствами, которые будут игнорироваться. Поэтому вопрос заключается в том, почему в первую очередь используется массив. –

+7

Это не массив ... – JLRishe

+2

Это недопустимый синтаксис массива. Если вы измените его на объект, вы можете использовать методы ES6 для получения ключа: 'Object.entries (skus_colorcode) .find (a => a [1] ==" 9620 ") [0]'. – Xufox

ответ

4

Вы код не действует вообще. Массив - это список элементов без ключей. Вы должны использовать объект, как это:

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"} 

Чтобы найти ключ (HT ....), что соответствует "9620", попробуйте этот код:

var keys = Object.getOwnPropertyNames(skus_colorcode), key; 

for(var i = 0; i < keys.length; i++) 
    if(skus_colorcode[keys[i]] === "9620") { 
     key = keys[i]; 
     break; 
    } 

// The right key is into the "key" variable 
console.log(key); // says "HT2787Z2UK" 
+1

Массив может содержать нечисловые ключи и быть абсолютно допустимым. Представленный синтаксис не будет действительным инициализатором, но это явно не тот синтаксис, который OP использовал для построения массива. –

+1

В моем браузере (последняя версия Chrome) массив вызывает синтаксическую ошибку – ClementNerma

+0

* «... Синтаксис, показанный не будет действительным инициализатором, но это явно не тот синтаксис, который OP использовал для построения массива» * –

1

Попробуйте

function arraySearch(arr,val) { 
    for (var key in arr) { 
     this_val = array[key]; 
     if(this_val == val){ 
      return key; 
      break; 
     } 
    } 
} 
+0

У вашего кода есть большая проблема: использование цикла for (var ...) очень медленное. Вы должны использовать 'Object.keys (arr);', а затем выполните инкрементный цикл, как я сделал для поиска по массиву. – ClementNerma

+1

@ClementNerma: Как вы думаете, 'Object.keys' способен собирать ключи? 'Object.keys' также должен выполнить проверку' .hasOwnProperty() 'для каждого ключа. Вы действительно протестировали производительность? –

+0

Да, я протестировал выступления. Object.keys() не выполняет .hasOwnProperty(), потому что это родная функция C++. Таким образом, выполнение выполняется быстрее, чем код JavaScript. Как ни странно, для (var i in ...) является одним из более медленных способов изучения объекта. ПРИМЕЧАНИЕ. Я сделал ошибку, которая не является Object.keys(), но Object.getOwnPropertyNames(). – ClementNerma

-2

Вы можете использовать Jquery :

var skus_colorcode = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"} 


$.each(skus_colorcode , function(key, value) { 
    if(value == '9620') 
     alert(key); 
}); 
0

Это должно быть

var obj = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"} 

for (var key of obj) { 
    if (obj[key] == "9620"){ 
    return key; 
    } 
} 

return false 
0

Я согласен с кодом «hemnath Mouli» должен быть, как он писал:

<script type="text/javascript"> 
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}; 
    function getIndexOf(obj,value){ 
     var count = 0; 
     for (var i in obj){ 
      if(obj[i] == value.toString()){ 
       return "index[" + count + "]:" + obj[i] + " = " + i; 
       //return what you want 
      } 
      count ++; 
     } 
    } 
</script> 

Тогда U получил значение

<script type="text/javascript"> 
    alert(getIndexOf(keys,9621)); 
</script> 

Не могли бы вы прислать кусок кода для извлечения значений @ClementNerma даже Я согласен с вами, что это не самый эффективный способ.

Я просто не хочу «опробовать» вопрос.

Или, если вы хотите, чтобы преобразовать объект в массив:

<script type="text/javascript"> 
    keys = {HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"}; 
    function obj2Array(obj){ 
     k = []; 
     for (var i in obj){ 
      k.push(obj[i]); 
     } 
     return k; 
    } 
</script> 

<script type="text/javascript"> 
    arr = obj2Array(keys); 
    alert (arr[2]); 
</script> 

@abu абу

Смежные вопросы