Fungsi Javascript Object push ()

102

Saya memiliki objek javascript (saya sebenarnya mendapatkan data melalui permintaan ajax):

var data = {};

Saya telah menambahkan beberapa hal ke dalamnya:

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

Sekarang saya ingin menghapus semua objek dengan status tidak valid (tetapi tetap menjaga urutannya sama):

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

Dalam pikiran saya, semua ini harus berfungsi, tetapi saya mendapatkan kesalahan yang tempData.pushbukan merupakan fungsi. Saya mengerti mengapa itu tidak sama dengan array, tapi apa yang bisa saya lakukan sebaliknya?

Andrew Jackman
sumber
4
Sepertinya Anda sebaiknya menggunakan array
Esailija

Jawaban:

132

push()adalah untuk array , bukan objek , jadi gunakan struktur data yang benar.

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;
Matt Ball
sumber
9
+1 mengalahkan saya untuk itu. Jangan lupa untuk mengubah for...inloop juga.
Andy E
@AttBall saya buruk! Saya tidak terlalu mahir dalam ulasan SO dan sebagainya! :)
Shouvik
1
Push untuk array, Apakah ada cara untuk menambahkan array ke objek?
Venkat
1
Bagaimana dengan array asosiatif?
Kinnard Hockenhull
@KinnHull Maaf, saya tidak mengerti pertanyaannya. Bisakah Anda menjelaskan apa yang Anda tanyakan?
Matt Ball
18

Objek tidak mendukung properti push, tetapi Anda juga dapat menyimpannya menggunakan indeks sebagai kunci,

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

Saya pikir ini lebih mudah jika menghapus objek jika statusnya tidak valid, dengan melakukan.

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

Dan akhirnya Anda tidak perlu membuat var temp -

csantana
sumber
Tambahkan beberapa penjelasan dengan jawaban untuk bagaimana jawaban ini membantu OP dalam memperbaiki masalah saat ini
ρяσѕρєя K
5

Anda harus membuatnya var tempData = new Array();

Push adalah fungsi Array.

Alex Dn
sumber
9
Kenapa new Array()tidak []?
Matt Ball
3
[] adalah alternatif (jalan pintas) untuk membuat larik baru. Itu bisa dibuat dengan [] dan dengan Array () baru.
Alex Dn
6
[]adalah cara utama untuk membuat array, yang lainnya adalah alternatif dan bahkan dapat ditimpa.
Esailija
6
Lihat stackoverflow.com/questions/885156/… untuk diskusi tentang mengapa new Array()itu jahat
Jonas Høgh
w3schools.com/js/js_obj_array.asp new Array is regular array. Dimana [] didefinisikan sebagai primer?
Alex Dn
3

Bahasa pemrograman Javascript mendukung paradigma pemrograman fungsional sehingga Anda dapat melakukannya dengan mudah dengan kode-kode ini.

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

Saya berasumsi bahwa BENAR-BENAR Anda mendapatkan objek dari server dan ingin mendapatkan objek pada output

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

Kamil Kiełczewski
sumber
0
    tempData.push( data[index] );

Saya setuju dengan jawaban yang benar di atas, tapi .... Anda masih belum memberikan nilai indeks untuk data yang ingin Anda tambahkan ke tempData. Tanpa nilai [index], seluruh array akan ditambahkan.

pengguna3094826
sumber
Harap jelaskan cara menyelesaikan masalah secara detail. Terima kasih.
Leonid Glanz
Ini akan memperbaiki jawaban yang diterima dari Matt Ball. Saat kita melakukan perulangan melalui data, kita seharusnya hanya mendorong [indeks] data, bukan data seluruhnya.
Jonathan Bergeron
-2

Lakukan:


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

Sudhir Bastakoti
sumber
5
Kenapa new Array()tidak []?
Matt Ball
perhatikan perbedaan antara new Array (); dan Array baru; Anda harus dapat menjawab pertanyaan seperti itu daripada menceritakan tentang alternatif ..
Jonathan