2012-01-19 17 views
58

Ho un oggetto javascript (io in realtà ottenere i dati tramite una richiesta Ajax):Javascript Object Push() funzione

var data = {}; 

ho aggiunto alcune cose in esso:

data[0] = { "ID": "1"; "Status": "Valid" } 
data[1] = { "ID": "2"; "Status": "Invalid" } 

Ora desidera rimuovere tutti gli oggetti con uno stato non valido (ma tenere tutto l'ordinamento stesso):

var tempData = {}; 
for (var index in data) { 
    if (data[index].Status == "Valid") { 
     tempData.push(data); 
    } 
} 
data = tempData; 

Nella mia mente, tutto questo shou Ho funzionato, ma sto ricevendo un errore che tempData.push non è una funzione. Capisco perché non è la stessa cosa di un array, ma cosa potrei fare diversamente?

+4

Sembra che dovresti usare solo un array – Esailija

risposta

90

push() is for arrays, non objects, quindi utilizzare la struttura dati corretta.

var data = []; 
// ... 
data[0] = { "ID": "1", "Status": "Valid" }; 
data[1] = { "ID": "2", "Status": "Invalid" }; 
// ... 
var tempData = []; 
for (var index=0; index<data.length; index++) { 
    if (data[index].Status == "Valid") { 
     tempData.push(data); 
    } 
} 
data = tempData; 
+9

+1 picchiarmi. Non dimenticare di cambiare anche il ciclo 'for ... in'. –

+0

@MattBall my bad! Non sono così abile a SO review e roba del genere! :) – Shouvik

+0

Push è per array, esiste un modo per aggiungere una matrice a un oggetto? – Venkat

3

Devi effettuare var tempData = new Array();

push è una funzione di matrice.

+7

Perché 'new Array()' e not '[]'? –

+2

[] è un'alternativa (collegamento) per creare un nuovo array. Può essere creato con [] e con la nuova matrice(). –

+5

'[]' è il modo principale per creare array, l'altro è un'alternativa e può anche essere sovrascritto. – Esailija

0

Do:

 

var data = new Array(); 
var tempData = new Array(); 
 
+4

Perché 'new Array()' e not '[]'? –

+2

significa che non può essere [], solo un'alternativa ... –

+0

nota la differenza tra la nuova matrice(); e nuova matrice; Dovresti essere in grado di rispondere a tali domande invece di parlare di alternative. –

0
tempData.push(data[index]); 

Sono d'accordo con la risposta corretta sopra, ma .... il tuo ancora non dando il valore di indice per i dati che si desidera aggiungere alla TempData. Senza il valore [indice] verrà aggiunto l'intero array.

+0

Descrivi come risolvere il problema in dettaglio. Grazie. –

+0

Questo sarebbe per correggere la risposta accettata da Matt Ball. Dato che stiamo scorrendo i dati, dovremmo solo spingere i dati [indice], non i dati interamente. –

7

oggetti non supporta proprietà spinta, ma è possibile salvarlo come pure utilizzando l'indice come chiave,

var tempData = {}; 
 
for (var index in data) { 
 
    if (data[index].Status == "Valid") { 
 
    tempData[index] = data; 
 
    } 
 
} 
 
data = tempData;

penso che questo è più facile se rimuovere l'oggetto, se il suo stato è non valido, facendo.

for(var index in data){ 
 
    if(data[index].Status == "Invalid"){ 
 
    delete data[index]; 
 
    } 
 
}

E infine non è necessario creare un var Temp -

+0

Aggiungi una spiegazione con la risposta per come questa risposta aiuta OP nel risolvere il problema corrente –

+0

@ ρяσѕρєяK Fatto. –

3

JavaScript linguaggio di programmazione supporta paradigma di programmazione funzionale, in modo da poter fare facilmente con questi codici.

var data = [ 
    {"Id": "1", "Status": "Valid"}, 
    {"Id": "2", "Status": "Invalid"} 
]; 
var isValid = function(data){ 
    return data.Status === "Valid"; 
}; 
var valids = data.filter(isValid); 
Problemi correlati