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.