Javascript 对象 push() 函数

IT技术 javascript json
2021-03-09 04:37:45

我有一个 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不是函数的错误我明白为什么它与数组不同,但我还能做什么?

6个回答

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;
关联数组呢?
2021-04-16 04:37:45
+1 打败了我。也不要忘记更改for...in循环。
2021-04-19 04:37:45
@MattBall 我不好!我不是很擅长 SO 评论和东西!:)
2021-04-26 04:37:45
@KinnardHockenhull 对不起,我不明白这个问题。你能澄清你在问什么吗?
2021-04-30 04:37:45
push是用于数组的,有没有什么办法可以给对象添加数组?
2021-05-01 04:37:45

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

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

我认为如果删除对象,如果其状态无效,这样做会更容易。

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

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

添加一些解释并回答此答案如何帮助 OP 解决当前问题
2021-05-15 04:37:45

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

Push 是一个数组函数。

[] 是创建新数组的替代方法(快捷方式)。它可以由 [] 和 new Array() 组成。
2021-04-27 04:37:45
请参阅stackoverflow.com/questions/885156/...讨论为什么new Array()是邪恶的
2021-05-02 04:37:45
[] 是创建数组的主要方法,另一种是替代方法,甚至可以被覆盖。
2021-05-04 04:37:45
为什么new Array()[]
2021-05-05 04:37:45
w3schools.com/js/js_obj_array.asp new Array 是正则数组。[] 在哪里定义为主要的?
2021-05-12 04:37:45

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

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

我假设您真的从服务器获取对象并希望在输出中获取对象

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