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