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.