2010-12-09 34 views
10

Javascript'te yalnızca bir parçasına ihtiyacım olan ilişkisel bir dizi var. Düzenli bir diziyle, ihtiyacım olan kısmı elde etmek için sadece dilimi kullanırdım, ama açıkçası bu bir ilişkisel dizi üzerinde çalışmayacak. Bu nesnenin yalnızca bir kısmını döndürmek için kullanabileceğim herhangi bir Javascript işlevi var mı? Değilse, bunu yapmak için en iyi uygulamalar hangisi olurdu? Teşekkürler!Javascript İlişkilendirme Dizisi'nin bir dilimini aldınız mı?

+2

jQuery bir seçenek var mı? – James

+0

Öncelikle, sakladığınız verilerin türünü ve bununla ne yapmanız gerektiğini bize bildirin. Çok boyutlu mu? Sipariş verilmesi gerekiyor mu? Özel ihtiyaçlarla ilgili birkaç detay yardımcı olabilir. –

+0

Evet, bu site boyunca jQuery kullanıyorum. –

cevap

4

'dilim' Nesne, hayır için iyi bir yolu olmalı gitmiyor, ama sen gerçekten olsaydı bunu yapabilirsiniz: küçük işlevi yoktur

var myFields = ['field1', 'field2', 'field3']; 

var mySlice = {}; 

for (var i in myFields) { 
    var field = myFields[i]; 

    mySlice[field] = myOriginal[field]; 
} 
+3

Eksik hasOwnProperty ... 3 ... 2 ... 1 ...;) –

+0

Hmm'de patlıyor, yani temelde nesne özellikleri ile döngü? Nesnem dilediğim nesnede ihtiyacım olan tüm özelliklere sahip olduğu için, sadece bir döngüde int ekleyebilir ve sadece ihtiyacım olan sayıları alamaz mıyım? yani (i> 0 && <11)? –

+1

@IvoWetzel Sayfada, Nesne prototipinde sayısız özellik ekleyen bir kod varsa, o zaman kendi hataları vardır! – Raynos

1

kullandığım:

/** 
* Slices the object. Note that returns a new spliced object, 
* e.g. do not modifies original object. Also note that that sliced elements 
* are sorted alphabetically by object property name. 
*/ 
function slice(obj, start, end) { 

    var sliced = {}; 
    var i = 0; 
    for (var k in obj) { 
     if (i >= start && i < end) 
      sliced[k] = obj[k]; 

     i++; 
    } 

    return sliced; 
} 
2

Tam olarak bunu yapan this gist oluşturdum. Sağlanan yalnızca argümanlar ile yeni bir nesne döndürür ve eski nesneyi sağlam bırakır.

if(!Object.prototype.slice){ 
    Object.prototype.slice = function(){ 
     var returnObj = {}; 
     for(var i = 0, j = arguments.length; i < j; i++){ 
      if(this.hasOwnProperty(arguments[i])){ 
       returnObj[arguments[i]] = this[arguments[i]]; 
      } 
     } 
     return returnObj; 
    } 
} 

Kullanımı:

var obj = { foo: 1, bar: 2 }; 

obj.slice('foo'); // => { foo: 1 } 
obj.slice('bar'); // => { bar: 2 } 
obj;    // => { foo: 1, bar: 2 } 
+1

Ayrıca, [karşı (hariç) mevcuttur] (https://gist.github.com/zykadelic/13ae10dec64d1fd59efe). Yeni bir kopyasını döndürmek yerine, doğrudan nesne üzerinde çalışır. – zykadelic

+0

Teşekkürler zykadelic, bu bana çok yardımcı oldu. –

+0

@DanielLoureiro Sevindim :) – zykadelic

İlgili konular