2012-01-19 16 views
58

Tengo un objeto de javascript (que en realidad obtener los datos a través de una petición Ajax):Javascript Object push() la función

var data = {}; 

he añadido algunas cosas en él:

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

Ahora querer quitar todos los objetos con un estado no válido (pero mantener todo el ordenamiento misma):

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

En mi mente, todo esto Shou Trabajo, pero me aparece un error que indica que tempData.push no es una función. Entiendo por qué no es lo mismo que una matriz, pero ¿qué otra cosa podría hacer?

+4

Parece que debe usar simplemente una matriz – Esailija

Respuesta

90

push() is for arrays, no objects, por lo tanto, utilice la estructura de datos correcta.

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 me gano. No olvides cambiar el bucle 'for ... in' también. –

+0

@MattBall mi mal! ¡No soy realmente tan experto en SO review y esas cosas! :) – Shouvik

+0

Push es para matriz, ¿hay alguna forma de agregar una matriz a un objeto? – Venkat

3

Debe hacer var tempData = new Array();

Push es una función de matriz.

+7

¿Por qué 'new Array()' y no '[]'? –

+2

[] es una alternativa (acceso directo) para crear una nueva matriz. Se puede hacer con [] y con una nueva matriz(). –

+5

'[]' es la forma principal de crear matrices, las otras son alternativas e incluso se pueden sobrescribir. – Esailija

0

Do:

 

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

¿Por qué 'new Array()' y no '[]'? –

+2

no significaba que no podía ser [], solo una alternativa ... –

+0

tenga en cuenta la diferencia entre la nueva matriz(); y nuevo Array; Debería poder contestar estas preguntas en lugar de hablar sobre alternativas. –

0
tempData.push(data[index]); 

estoy de acuerdo con la respuesta correcta por encima, pero .... su todavía no dar el valor del índice para los datos que desea agregar a TempData. Sin el valor [índice], se agregará toda la matriz.

+0

Describa cómo resolver el problema en detalle. Gracias. –

+0

Esto sería para corregir la respuesta aceptada de Matt Ball. A medida que recorremos los datos, solo deberíamos insertar datos [índice], no datos por completo. –

7

objetos no es compatible con la propiedad de empuje, pero se puede guardar así el uso del índice como la clave,

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

creo que esto es más fácil si quite el objeto si su estado es inválido, haciendo.

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

Y, finalmente, no es necesario crear una var temp -

+0

Agregue una explicación con la respuesta de cómo esta respuesta ayuda OP en la fijación de la edición actual –

+0

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

3

Javascript lenguaje de programación compatible con el paradigma de programación funcional para que pueda hacer fácilmente con estos códigos.

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