2013-04-22 3 views
19

Ich habe folgendes:Wie kann ich die Indexnummer eines Objekts herausfinden, das ich in ein Array geschoben habe?

var gridData = {}; 
var TestRow = { 
    "name": "xx", 
    "description": "xx", 
    "subjectId": 15 
       }; 
gridData.push(TestRow) 

Wie kann ich die Indexnummer der neuen Daten herausfinden, dass ich gerade in das Objekt geschoben griddata?

+0

möglich Duplikat [JavaScript Array-Index mit Wert finden] (http://stackoverflow.com/questions/7346827/javascript-find-array-index-with-value) –

+2

Möchten Sie nicht herausfinden, warum die Methode 'push()' nicht funktioniert? t existieren zuerst auf diesem Objekt? – alex

Antwort

44

Als erstes nehme ich an, dass die gridData ein Array ist, kein Objekt, wie Sie in Ihrem Beispielcode gezeigt haben, weil ein Objekt keine .push() Methode hat, aber ein Array tut.

Verwenden Sie .length - 1 als Index für das letzte Element, das Sie in das Array gedrängt haben, oder speichern Sie den zurückgegebenen Wert von .push(). Dies ist die neue Länge des Arrays. Dies ist der Index des Elements, das Sie gerade in das Array gepackt haben, und ist gültig, bis Sie das Array vor diesem Index ändern (Elemente vor diesem Index hinzufügen oder entfernen).

var testRowIndex = gridData.push(TestRow) - 1; 
// then you can access that item like this 
var item = gridData[testRowIndex]; 

Obwohl dies nicht eine ganze Menge Sinn machen, da Sie bereits die Daten direkt in TestRow haben. Wie immer, wenn Sie beschreiben, welches Problem Sie wirklich lösen möchten, können wir wahrscheinlich nützlichere Antworten geben.

+0

Ich denke nicht, dass dies eine gute Antwort ist, da die Länge nicht unbedingt der Index ist - in dem Fall, dass etwas anderes das Array auch manipuliert. In meinem Fall gibt es eine Zeitüberschreitung, die Elemente aus dem Array entfernt, so dass die Länge ist nicht das gleiche wie Index, was ist, was die Frage gestellt. –

+3

@PaulHaggo - Wenn Sie einen Wert auf das Array schieben, dann ist 'length - 1' immer der Index des Elements, das Sie gerade auf das Array geschoben haben. Wenn Sie dann anderen Code haben, der das Array manipuliert, dann sind alle Wetten aus - der Index dieses vorherigen Elements ist unbekannt und wird nicht bekannt sein, weil es davon abhängt, was der andere Code mit dem Array gemacht hat. Die Frage wurde nach dem Index des Artikels gefragt, der "gerade gedrückt" wurde. Dies beantwortet diese Frage. – jfriend00

+2

Ich weiß, was Sie meinen, aber der Index, den Sie erhalten, ist nur gültig, solange keine Elemente jemals aus dem Array vor diesem Index entfernt werden. Ich kann den Index sofort mit Ihrer Methode erhalten, aber wenn ich versuche, diesen Wert später zu verwenden, verweist er möglicherweise nicht auf das Element, von dem ich dachte, dass er es getan hat. Ihre Antwort ist immer noch korrekt, aber ich denke nicht, dass sie so hilfreich ist, wie es für Leute sein könnte, die Arrays nicht gut verstehen. –

4

Wenn Sie das Element in ein Array schieben, erhalten Sie die aktuelle Länge des Arrays als Rückgabewert. Verwenden Sie es, um den Index zu finden.

var gridData = []; 
var TestRow = { 
    "name": "xx", 
    "description": "xx", 
    "subjectId": 15 
       }; 
var length=gridData.push(TestRow); 
alert(length-1); 

Array.push gibt die neue Länge Eigenschaft des Objekts, auf dem die Methode aufgerufen wurde.

+0

Ich hatte nicht vor, diese Antwort zu duplizieren. Aber als ich sah, dass jfriend00 es durch die Berechnung von array.length-1 beantwortete, dachte ich daran, diese Abkürzung zu beantworten, um den Rückgabewert selbst zu verwenden. – PSL

1

zuerst gehen, ich werde sagen, es ist jedenfalls zu find-indexof-element-in-jquery-array

ähnlich ist, sah @jfriend00 und @PSCoder es brillant zu beantworten, wollte ich einige alternative des vermitteln Index zu finden,

Angenommen, Sie haben Ihre Array als: -

var gridData = [];//{} Curly braces will define it as object type, push operations can take place with respect to Array's 

und ich habe zwei oder mehr Daten in den Array

var TestRow = { 
     "name": "xx", 
     "description": "xx", 
     "subjectId": 15 
    }; 
    var TestRow1 = { 
     "name": "xx1", 
     "description": "xx1", 
     "subjectId": 151 
    }; 

Jetzt schiebe ich diese beiden Daten, wie Sie es getan haben. Um den Index des geschoben Element zu finden, die wir verwenden können, .indexOf und .inArray

var indexOfTestRow0 = gridData.indexOf(TestRow);// it returns the index of the element if it exists, and -1 if it doesn't. 
    var indexOfTestRow1 = gridData.indexOf(TestRow1);// it returns the index of the element if it exists, and -1 if it doesn't. 

    //Search for a specified value within an array and return its index (or -1 if not found). 
    var indx1 = jQuery.inArray(TestRow, gridData); 
    var indx2 = jQuery.inArray(TestRow1, gridData); 

dachte an die Sachen zu testen, so habe ich versucht, etwas sehr einfach wie folgt: -

<head> 
    <title></title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
</head> 
<script> 
    $(document).ready(function() { 
     var gridData = [];//{} Curly braces will define it as Boject type, push operations can take place with respect to Array's 
     var TestRow = { 
      "name": "xx", 
      "description": "xx", 
      "subjectId": 15 
     }; 
     var TestRow1 = { 
      "name": "xx1", 
      "description": "xx1", 
      "subjectId": 151 
     }; 
     gridData.push(TestRow); 
     gridData.push(TestRow1); 
     console.log(gridData); 

     var indexOfTestRow0 = gridData.indexOf(TestRow);// it returns the index of the element if it exists, and -1 if it doesn't. 
     var indexOfTestRow1 = gridData.indexOf(TestRow1);// it returns the index of the element if it exists, and -1 if it doesn't. 

     //Search for a specified value within an array and return its index (or -1 if not found). 
     var indx1 = jQuery.inArray(TestRow, gridData); 
     var indx2 = jQuery.inArray(TestRow1, gridData); 

     console.log(indexOfTestRow0); 
     console.log(indexOfTestRow1); 

     console.log(indx1); 
     console.log(indx2); 
    }); 


</script> 
Verwandte Themen