2016-07-02 19 views
0

Ich habe ein Array wie dieses [HT2787UK: "9618", HT2787Z1UK: "9619", HT2787Z3UK: "9621", HT2787Z2UK: "9620"]. Ich habe das von der Konsole bekommen.Verwenden von indexOf() in Javascript-Array

Ich versuche Wert wie

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

unten

, um herauszufinden, aber es wird -1 zurück.

Warum bekomme ich dieses Ergebnis ??

+1

'.indexOf' nur bei numerischer Indizes aussieht. Ihr Array wurde mit nicht numerischen Eigenschaften gefüllt, die ignoriert werden. Es stellt sich also die Frage, warum ein Array auf diese Weise überhaupt eingesetzt wird. –

+7

Das ist kein Array ... – JLRishe

+2

Dies ist eine ungültige Arraysyntax. Wenn Sie es in ein Objekt ändern, können Sie ES6-Methoden verwenden, um den Schlüssel zu erhalten: 'Object.entries (skus_colorcode) .find (a => a [1] ==" 9620 ") [0]'. – Xufox

Antwort

4

Sie Code überhaupt Versuchen nicht gültig ist. Ein Array ist eine Liste von Elementen ohne Schlüssel. Sie müssen ein Objekt wie folgt verwenden:

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

den Schlüssel zu finden (HT ....), die "9620" entspricht, versuchen Sie diesen Code:

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

Ein Array kann nicht-numerische Schlüssel enthalten und absolut gültig sein. Die gezeigte Syntax wäre kein gültiger Initialisierer, aber das ist eindeutig nicht die tatsächliche Syntax, die das OP verwendet hat, um das Array zu konstruieren. –

+1

In meinem Browser (neueste Version von Chrome) verursacht das Array einen Syntaxfehler – ClementNerma

+0

* "... Die gezeigte Syntax wäre kein gültiger Initialisierer, aber das ist eindeutig nicht die tatsächliche Syntax, die das OP zum Aufbau des Arrays verwendete" * –

1

diese

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

Ihr Code hat ein großes Problem: Die Verwendung einer for (var ...) Schleife ist sehr langsam. Sie sollten 'Object.keys (arr);' verwenden und als nächstes eine inkrementelle Schleife wie ich, um das Array zu durchsuchen. – ClementNerma

+1

@ClementNerma: Wie denken Sie, dass 'Object.keys' in der Lage ist, die Schlüssel zu sammeln? 'Object.keys' muss außerdem eine' .hasOwnProperty() 'Prüfung für jeden Schlüssel durchführen. Hast du die Leistung tatsächlich getestet? –

+0

Ja, ich habe die Leistungen getestet. Object.keys() führt keine .hasOwnProperty() durch, weil es eine native C++ - Funktion ist. Die Ausführung ist also schneller als ein JavaScript-Code. Seltsamerweise ist für (var i in ...) eine der langsamsten Möglichkeiten, ein Objekt zu erkunden. HINWEIS: Ich habe einen Fehler gemacht, der nicht Object.keys(), sondern Object.getOwnPropertyNames() ist. – ClementNerma

-2

Sie können JQuery verwenden :

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


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

sollte diese

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

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

return false 
0

Ich bin damit einverstanden sollte mit „hemnath mouli“ Code sein, wie er schrieb:

<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> 

Dann bekam U die Werte

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

Könnten Sie bitte ein Stück Code senden und die Werte abzurufen @ClementNerma sogar Ich stimme Ihnen zu, dass dies nicht der effizientere Weg ist.

Ich möchte nur nicht die Frage "downvote".

Oder wenn Sie möchten, dass Ihr Objekt in ein Array konvertieren:

<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 abu