2010-08-25 23 views
5

Ich habe ein Array von Objekten in Javascript. Ich benutze jquery.Holen Sie sich das erste Element eines spärlichen JavaScript-Arrays

Wie bekomme ich das erste Element im Array? Ich kann den Array-Index nicht verwenden - wie ich jeden Elementindex zuweisen, wenn ich die Objekte zum Array hinzufüge. Also die Indizes arent 0, 1, 2 usw.

Sie brauchen nur das erste Element des Arrays zu bekommen?

+1

Was Sie als Array-Index verwendet dann? –

Antwort

4

Wenn Sie nicht fortlaufend nummerierten Elemente verwenden, müssen Sie eine Schleife durch, bis Sie die ersten Hit:

var firstIndex = 0; 
while (firstIndex < myarray.length && myarray[firstIndex] === undefined) { 
    firstIndex++; 
} 
if (firstIndex < myarray.length) { 
    var firstElement = myarray[firstIndex]; 
} else { 
    // no elements. 
} 

oder einen äquivalenten albernen Aufbau. Dadurch erhalten Sie den Index des ersten Artikels, der Ihnen vielleicht egal ist.

Wenn dies häufig der Fall ist, sollten Sie einen Verweis auf den aktuellen ersten gültigen Index beibehalten, damit dieser zu einer O (1) -Operation anstelle von O (n) wird. Wenn Sie häufig ein wirklich spärliches Array durchlaufen müssen, sollten Sie eine andere Datenstruktur in Betracht ziehen, z. B. das Beibehalten eines Objekts, das ordinale Ergebnisse auf Indizes zurückversetzt, oder etwas, das zu Ihren Daten passt.

+1

Achten Sie auf leere Arrays. – Douglas

+0

Danke, bearbeitet. –

+1

Dies kann schrecklich ineffizient sein, abhängig vom niedrigsten Index. – Jasper

4

Die Methode filter funktioniert mit Sparse-Arrays.

var first = array.filter(x => true)[0]; 
+2

-1. Falsch; Das beantwortet die Frage nicht. OP möchte das erste "gültige" Element, egal welchen Index es hat (nicht notwendigerweise Null). 'shift' zieht nur das ab, was an Element 0 ist, einschließlich' undefined'. –

+0

Mein Fehler, bearbeitet für eine Alternative, anstatt eine andere Antwort hinzuzufügen, die andere in die Irre führen könnte. –

+0

@GeorgeJempty Wahrscheinlich, weil es 'Filter' verwendet hat, also dachte ich" nah genug ", aber du hast Recht. Mein Schnitt war zu drastisch. – aleclarson

0

Wenn Sie sich finden, um Manipulation von Arrays viel zu tun, könnten Sie in der Underscore Bibliothek interessiert. Es bietet nützliche Methoden für die Manipulation von Arrays, zum Beispiel compact:

var yourArray = []; 
yourArray[10] = "foo"; 
var firstValue = _.compact(yourArray)[0]; 

aber es klingt wie Sie seltsam, etwas zu tun, wenn Sie Ihren Array konstruieren. Vielleicht hilft Ihnen ?

function getFirstIndex(array){ 
    var result; 
    if(array instanceof Array){ 
     for(var i in array){ 
      result = i; 
      break; 
     } 
    } else { 
     return null; 
    } 
    return result; 
} 

:

2

Haben Sie darüber nachgedacht?

Und als eine Möglichkeit, das letzte Element im Array zu erhalten:

function getLastIndex(array){ 
    var result; 
    if(array instanceof Array){ 
      result = array.push(""); 
      array.pop; 
     } 
    } else { 
     return null; 
    } 
    return result; 
} 

Keine dieser Anwendungen jquery.

2

Object.keys(array)[0] gibt den Index (in String Form) des ersten Elements im Sparse-Array zurück.

var array = []; 
array[2] = true; 
array[5] = undefined; 

var keys = Object.keys(array);   // => ["2", "5"] 
var first = Number(keys[0]);    // => 2 
var last = Number(keys[keys.length - 1]); // => 5 
0

Ich war auch ein ähnliches Problem konfrontiert und war überrascht, dass niemand das folgende betrachtet hat:

var testArray = []; 
testArray [1245]= 31; 
testArray[2045] = 45; 
for(index in testArray){ 
    console.log(index+','+testArray[index]) 
} 

Die obige

produzieren
1245,31 
2045,45 

könnte bei Bedarf Sie nach dem existieren Erste Iteration, wenn alles benötigt wurde, aber im Allgemeinen müssen wir wissen, wo im Array zu beginnen ist.

1

Dies ist ein Vorschlag mit ES5-Methode mit Array#some.

Der Code erhält das erste Nicht-Element und den Index. Die Iteration stoppt sofort mit true in der Callback-Rückkehr:

var a = [, , 22, 33], 
 
    value, 
 
    index; 
 

 
a.some(function (v, i) { 
 
    value = v; 
 
    index = i; 
 
    return true; 
 
}); 
 

 
console.log(index, value);

-1

Sie auch diese wieder verwendbaren Open Source verwenden können array-first component, die das erste Element einer bestimmten Array zurückgibt.

Beispiele:

first([1, 2, 3]) // => 1 
first(['a', 'b', 'c']) // => 'a' 
+0

Sie fragen nach einem ** spärlichen ** Array, kein normales Array. – aleclarson

Verwandte Themen