Javascript Object push()函数

And*_*man 87 javascript json

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

var data = {};
Run Code Online (Sandbox Code Playgroud)

我添加了一些东西:

data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mat*_*all 117

push()用于数组,而不是对象,因此请使用正确的数据结构.

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;
Run Code Online (Sandbox Code Playgroud)

  • +1打败了我.不要忘记改变`for ... in`循环. (9认同)

Ces*_*ana 12

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

var tempData = {};
for ( var index in data ) {
  if ( data[index].Status == "Valid" ) { 
    tempData[index] = data; 
  } 
 }
data = tempData;
Run Code Online (Sandbox Code Playgroud)

我认为如果通过执行操作,如果对象的状态无效,则删除对象会更容易.

for(var index in data){
  if(data[index].Status == "Invalid"){ 
    delete data[index]; 
  } 
}
Run Code Online (Sandbox Code Playgroud)

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


Ale*_* Dn 5

你必须使 var tempData = new Array();

Push 是一个数组函数。

  • 为什么是 `new Array()` 而不是 `[]`? (11认同)
  • `[]` 是创建数组的主要方式,其他是替代方式,甚至可以被覆盖。 (6认同)
  • 请参阅 http://stackoverflow.com/questions/885156/whats-wrong-with-var-x-new-array 讨论为什么 `new Array()` 是邪恶的 (6认同)
  • [] 是创建新数组的替代方法(快捷方式)。它可以用 [] 和 new Array() 组成。 (3认同)

小智 5

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

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