Javascript Object push () işlevi


104

Bir javascript nesnem var (aslında verileri bir ajax isteği aracılığıyla alıyorum):

var data = {};

İçine bazı şeyler ekledim:

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

Şimdi geçersiz durumdaki tüm nesneleri kaldırmak istiyorum (ancak her şeyi aynı sırayla koruyun):

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

Bence bunların hepsi işe yaramalı, ancak tempData.pushfonksiyon olmayan bir hata alıyorum . Neden bir dizi ile aynı olmadığını anlıyorum, ama başka türlü ne yapabilirim?


4
Görünüşe göre sadece bir dizi kullanmalısın
Esailija

Yanıtlar:


134

push()nesneler değil diziler içindir , bu nedenle doğru veri yapısını kullanın.

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 beni yendi. for...inDöngüyü de değiştirmeyi unutmayın .
Andy E

@MattBall benim hatam! SO inceleme ve benzeri konularda gerçekten o kadar usta değilim! :)
Shouvik

1
Push is for array, Bir nesneye dizi eklemenin herhangi bir yolu var mı?
Venkat

1
İlişkisel dizi ne olacak?
Kinnard Hockenhull

@KinnardHockenhull Üzgünüm, soruyu anlamadım. Ne istediğini açıklayabilir misin?
Matt Ball

18

Nesneler itme özelliğini desteklemez, ancak indeksi anahtar olarak kullanarak kaydedebilirsiniz,

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

Durum geçersizse nesneyi yaparak kaldırmanın daha kolay olacağını düşünüyorum.

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

Ve son olarak değişken temp oluşturmanıza gerek yok -


Bu cevabın şu anki sorunu
çözmede OP'ye

5

Yapmalısın var tempData = new Array();

İtme, bir Dizi işlevidir.


9
Neden new Array()ve değil []?
Matt Ball

3
[], yeni dizi oluşturmak için bir alternatiftir (kısayol). [] Ve yeni Array () ile yapılabilir.
Alex Dn

6
[]dizileri oluşturmanın birincil yoludur, diğeri alternatiflerdir ve hatta üzerine yazılabilir.
Esailija

6
Bkz stackoverflow.com/questions/885156/... neden bir tartışma için new Array()kötülüktür
Jonas Høgh

w3schools.com/js/js_obj_array.asp new Array normal dizidir. [] Nerede birincil olarak tanımlanır?
Alex Dn

3

Javascript programlama dili, işlevsel programlama paradigmasını destekler, böylece bu kodlarla kolayca yapabilirsiniz.

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

2

GERÇEKTEN sunucudan nesne aldığınızı ve çıktıda nesne almak istediğinizi varsayıyorum

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


0
    tempData.push( data[index] );

Yukarıdaki doğru yanıta katılıyorum, ancak .... tempData'ya eklemek istediğiniz veriler için hala dizin değerini vermiyorsunuz. [Dizin] değeri olmadan tüm dizi eklenecektir.


Lütfen sorunun nasıl çözüleceğini ayrıntılı olarak açıklayın. Teşekkürler.
Leonid Glanz

Bu, Matt Ball'dan kabul edilen cevabı düzeltmek olacaktır. Veriler arasında dönerken, verileri tamamen değil, yalnızca verileri [indeks] itmeliyiz.
Jonathan Bergeron

-2

Yapmak :


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


5
Neden new Array()ve değil []?
Matt Ball

new Array () arasındaki farkı not edin; ve yeni Dizi; Alternatifleri anlatmak yerine bu tür sorulara cevap verebilmelisiniz ..
Jonathan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.