Подтвердить что ты не робот

Функция Javascript Object push()

У меня есть объект 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 не является функцией. Я понимаю, почему это не то же самое, что массив, но что я мог сделать иначе?

4b9b3361

Ответ 1

push() предназначен для массивов, а не 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;

Ответ 2

Объекты не поддерживают свойство push, но вы также можете сохранить его, используя индекс как ключ,

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

Ответ 3

Вы должны сделать var tempData = new Array();

Push - это функция массива.

Ответ 4

Язык программирования Javascript поддерживает парадигму функционального программирования, поэтому вы можете легко справиться с этими кодами.

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

Ответ 5

Do:


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

Ответ 6

    tempData.push( data[index] );

Я согласен с правильным ответом выше, но... вы все еще не указали значение индекса для данных, которые вы хотите добавить в tempData. Без значения [index] будет добавлен весь массив.

Ответ 7

Я предполагаю, что действительно вы получаете объект с сервера и хотите получить объект на выходе

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);