SORU
22 Aralık 2009, Salı


JSON JavaScript bul

Daha iyi bir yolu JSON veri bulmak için döngü dışında var mı? Düzenlemek ve silmek için.

for(var k in objJsonResp) {
  if (objJsonResp[k].txtId == id) {
    if (action == 'delete') {
      objJsonResp.splice(k,1);
    } else {
      objJsonResp[k] = newVal;
    }
    break;
  }
}

Veri haritalar listesi olarak düzenlenir. Gibi:

[{id:value, pId:value, cId:value,...}, {id:value, pId:value, cId:value}, ...]

CEVAP
22 Aralık 2009, Salı


("Bir dizi JSON ile aradığınız dize zaten bir nesne grafiği, Bu durumda bir dizi.) serisi," JSON arama değilsin

Bazı seçenekler:

Bir Dizi Yerine bir Nesne kullanın

Eğer bu nesil kontrol ediyorsanız, onu yaparvarbir dizi olarak? Çünkü eğer yoksa, çok daha basit bir yolu var.

Bu orijinal veri olduğunu söylüyor:

[
    {"id": "one",   "pId": "foo1", "cId": "bar1"},
    {"id": "two",   "pId": "foo2", "cId": "bar2"},
    {"id": "three", "pId": "foo3", "cId": "bar3"}
]

Aşağıdakileri yapmak yerine mısın?

{
    "one":   {"pId": "foo1", "cId": "bar1"},
    "two":   {"pId": "foo2", "cId": "bar2"},
    "three": {"pId": "foo3", "cId": "bar3"}
}

KİMLİĞİ ile ilgili giriş önemsiz o zaman:

id = "one"; // Or whatever
var entry = objJsonResp[id];

...olarak güncellenmesi

objJsonResp[id] = /* New value */;

...ve kaldırılması:

delete objJsonResp[id];

Bu işlemin avantajı aslında bu JavaScript, dizine bir nesne kullanarak bir özellik adı olarak bir dize ve dize hazır bilgi olabilir, ya da olabilir bir değişken olarak *ile 19* yukarıda.

ID-bir Dizin koyarak Göster

(Aptalca bir fikir, yukarıda öncedir. Tarihsel nedenden dolayı.)

Göründüğü gibi bu bir dizi, ve bu durumda orada değil gerçekten daha iyi bir yol daha arayarak bir dizi sürece sizi ilgilendirmez harita üzerinde, ne varsa kontrol nesil nesne. E. g., bu aslında var dediler

[
    {"id": "one",   "pId": "foo1", "cId": "bar1"},
    {"id": "two",   "pId": "foo2", "cId": "bar2"},
    {"id": "three", "pId": "foo3", "cId": "bar3"}
]

Üreten kod numarası-dizini göster: bir sağlayabilir

{
    "index": {
        "one": 0, "two": 1, "three": 2
    },
    "data": [
        {"id": "one",   "pId": "foo1", "cId": "bar1"},
        {"id": "two",   "pId": "foo2", "cId": "bar2"},
        {"id": "three", "pId": "foo3", "cId": "bar3"}
    ]
}

O zaman değişkeni kimliği için bir giriş almak id önemsiz

var index = objJsonResp.index[id];
var obj = objJsonResp.data[index];

Bu nesneleri özellik adlarını kullanarak dizin oluşturabilirsiniz yararlanır.

Eğer bunu yaparsanız, tabii ki, bakım bir sorun haline gelebilecek olan dizi, değiştirme, harita güncelleme var.

Ama değilsen kontrol nesil nesne veya güncelleme haritanın kimlikleri-dizinler çok fazla kod ve/ya da bakım sorunu, o zaman bir kaba kuvvet arama.

Kaba Kuvvet Arama (düzeltildi)

OT (ama . biraz ^em>yaptıeğer daha iyi bir yolu varsa sor: -) ) ama bir dizi döngü için kod yanlıştır. Details here ama sen insan değilsin for..in döngü ile dizi dizinleri (ya da daha doğrusu, eğer sen, senin için özel ağrıları için bunu yapmak); for..in döngüler yoluylabir nesnenin özelliklerideğil ., ^em>bir dizinin dizin. Olmayan seyrek bir dizi ile en iyi bahis (ve senin olmayan seyrek) eski moda standart bir döngü

var k;
for (k = 0; k < someArray.length;   k) { /* ... */ }

ya

var k;
for (k = someArray.length - 1; k >= 0; --k) { /* ... */ }

Tercih (ikincisi benim için mantıksız olan her zaman daha hızlı tüm uygulamalarında değil, ama biz oradayız) hangisi. (Birseyrekdizi, for..in ama özel ağrıları tuzaklar kaçınmak amacıyla; makale daha yukarıda bağlantılı tekrar kullanabilirsiniz.)

Bir dizi for..in kullanarakgörünüyordiziler dizinleri her biri için özellikleri vardır çünkü basit durumlarda çalışmak, ve sadece diğer varsayılan özellikleri (length ve yöntemleri) olmayan sayısız olarak işaretlenmiş. Ama sonları olarak ayarlayın (veya bir çerçeve ayarlar) diğer özellikler dizi nesne (ki son derece geçerli; diziler sadece nesnelerle biraz özel işlem etrafında length özellik).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • olinerd

    olinerd

    23 AĞUSTOS 2007
  • OVERWERK

    OVERWERK

    6 Temmuz 2010