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?


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;

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 -


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.


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

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


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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.