Javascript Object push()函数

时间:2012-01-19 12:13:00

标签: javascript json

我有一个javascript对象(实际上是通过ajax请求获取数据):

var data = {};

我已经添加了一些内容:

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

现在我想删除状态无效的所有对象(但保持所有顺序相同):

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

在我看来,所有这一切都应该有效,但我收到tempData.push不是函数的错误。我理解为什么它与数组不一样,但我还能做什么呢?

8 个答案:

答案 0 :(得分:111)

push() is for arrays,而不是objects,因此请使用正确的数据结构。

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;

答案 1 :(得分:11)

对象不支持push属性,但您也可以使用索引作为键保存它,

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

我认为,如果对象的状态无效,则删除对象会更容易。

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

最后你不需要创建一个var temp -

答案 2 :(得分:4)

您必须var tempData = new Array();

Push是一个数组函数。

答案 3 :(得分:3)

Javascript编程语言支持函数式编程范例,因此您可以轻松使用这些代码。

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

答案 4 :(得分:1)

我假设您确实是从服务器获取对象,并且想要在输出中获取对象

Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])

var data = { 5: { "ID": "0", "Status": "Valid" } }; // some OBJECT from server response

data = { ...data,
  0: { "ID": "1", "Status": "Valid" },
  1: { "ID": "2", "Status": "Invalid" },
  2: { "ID": "3", "Status": "Valid" }
}

// solution 1: where output is sorted filtred array
let arr=Object.keys(data).filter(k=> data[k].Status!='Invalid').map(k=>data[k]).sort((a,b)=>+a.ID-b.ID);
  
// solution2: where output is filtered object
Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])
  
// show
console.log('Object',data);
console.log('Array ',arr);

答案 5 :(得分:1)

希望这个可以帮到你。

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

let tempData = [];

tempData= data.filter((item)=>item.Status!='Invalid')

console.log(tempData)

答案 6 :(得分:0)

做:


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

答案 7 :(得分:0)

    tempData.push( data[index] );

我同意上面的正确答案,但是......你仍然没有给你想要添加到tempData的数据的索引值。如果没有[index]值,将添加整个数组。