2013-04-22 9 views
19

Mam następujący:Jak mogę znaleźć numer indeksu obiektu, który wepchnęłam do tablicy?

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

Jak mogę znaleźć numer indeksu nowych danych, które Właśnie wepchnięta do obiektu gridData?

+0

możliwy duplikat [JavaScript znajdź indeks tablicy z wartością] (http://stackoverflow.com/questions/7346827/javascript-find-array-index-with-value) –

+2

Czy nie chcesz dowiedzieć się, dlaczego metoda 'push()' doesn ' t istnieć na tym obiekcie w pierwszej kolejności? – alex

Odpowiedz

44

Po pierwsze, zakładam, że gridData jest tablicą, a nie obiektem, jak pokazano w przykładowym kodzie, ponieważ obiekt nie ma metody .push(), ale tablica ma.

Użyj .length - 1 jako indeksu do ostatniej pozycji, którą wepchnąłeś do tablicy lub zapisz zwróconą wartość z .push(), która jest nową długością tablicy. Będzie to indeks elementu, który właśnie wepchnąłeś na tablicę i będzie ważny, dopóki nie zmodyfikujesz tablicy przed tym indeksem (dodając lub usuwając elementy przed tym indeksem).

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

Choć nie ma to dużo sensu, ponieważ masz już dane prawo w TestRow. Jak zwykle, jeśli opisujesz problem, który naprawdę chcesz rozwiązać, prawdopodobnie zapewnimy bardziej przydatne odpowiedzi.

+0

Nie sądzę, że jest to świetna odpowiedź, ponieważ długość niekoniecznie jest indeksem - w przypadku, gdy coś innego również manipuluje tablicą. W moim przypadku istnieje limit czasu, który usuwa elementy z tablicy, więc długość nie jest taka sama jak indeks, na co jest zadane pytanie. –

+3

@PaulHaggo - jeśli wepchniesz wartość do tablicy, "length - 1" jest zawsze indeksem tego elementu, który właśnie wepchnąłeś na tablicę. Jeśli masz inny kod, który manipuluje tablicą, wszystkie zakłady są wyłączone - indeks tego poprzedniego elementu jest nieznany i nie będzie znany, ponieważ zależy to od tego, co inny kod zrobił z tablicą. Pytanie wymagało indeksu przedmiotu, który został "właśnie zepchnięty". To odpowiada na to pytanie. – jfriend00

+2

Wiem, co masz na myśli, ale indeks, który otrzymasz, jest ważny tylko tak długo, jak żadne elementy nie zostaną usunięte z tablicy przed tym indeksem. Mogę uzyskać indeks z twoją metodą natychmiast, ale jeśli spróbuję użyć tej wartości później, może nie odnosić się do elementu, który myślałem, że to zrobił. Twoja odpowiedź jest nadal poprawna, ale nie sądzę, żeby była tak pomocna, jak mogłaby być dla osób, które nie rozumieją dobrze tablic. –

4

Po naciśnięciu elementu do tablicy otrzymasz bieżącą długość tablicy jako wartość zwracaną. Użyj go, aby znaleźć indeks.

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

Array.push powraca nową właściwość długości przedmiotu, na którym metodę.

+0

Nie zamierzałem powtarzać tej odpowiedzi. Ale kiedy zobaczyłem, że jfriend00 odpowiedział na to, obliczając array.length-1, pomyślałem o odpowiedzi na ten skrótowy sposób użycia samej wartości zwracanej. – PSL

1

Idź, powiem, że to podobne do find-indexof-element-in-jquery-array

Zresztą widział @jfriend00 i @PSCoder odpowiadając go znakomicie, chciałem przekazać niektóre alternatywa do znalezienia Index,

Zakładając, masz tablica jak: -

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

i posiada dwie lub więcej danych w tym Array

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

Teraz, popycham te dwie dane, tak jak to zrobiliście. Aby znaleźć indeks popychane elementu, możemy użyć, .indexOf i .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); 

Myśl testowania rzeczy, więc próbowałem coś bardzo prostego, jak poniżej: -

<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> 
Powiązane problemy