2014-06-22 39 views
7

ilişkisel bir dizide Lodash bir forEach döngü var mı? Bulduğum "forEach" adlı işlevi, yalnızca dizine diziler için çalışıyor. Bunu denediğinizde AncakLodash forEach ilişkilendirilebilir Dizisi

1 
2 
3 

: Ben değerlerle [1, 2, 3] içeren bir dizi myArray var ve

yapmak ve (Node olarak) işlevini çalıştırırsanız Örneğin, ben beklenen sonuç elde bir ilişkisel dizi ile, çalışmıyor:

lodash = require('lodash'); 
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

Eğer Node, geri çağırma işlevi d bu çalışmasını görebileceğiniz gibi dizi elemanlarından başka bir şey içerdiğinde bile ateş etmez. Sadece döngüyü tamamen atlıyor gibi görünüyor.

Her şeyden önce, bu neden oluyor? İkincisi, bu sorun için Lodash içinde bulunan başka bir işlev var mı, yoksa, özgün bir dizide işlem değiştirmeden, bunu gerçekleştirmek için forEach işlevini kullanmak için bir yolu var mı?

cevap

5

Lodash bu amaçla işlevi forOwn sahiptir. İkinci dizide,

_.forOwn(myArray, function(index) { 
    console.log(index); 
}); 

amaçlanan sonucu almanız gerekir.

Yine de, neden forEach'un ilk işlevi atladığını düşündüğümden emin değilim, ancak dizinin "uzunluk" değerine sahip olmaması gerektiğini düşünüyorum. Bir JavaScript dizisinin uzunluğu, sahip olduğu en yüksek numaralı dizindir. Örneğin,olarak tanımlanan bir myOtherArray dizisi, başka bir değeri olmasa bile, 1.000 uzunluğa sahip olacaktır (çünkü diziler sıfır indeksli, yani 0'da başlar, 1 değil). Bu, numaralandırılmış dizin içermeyen bir dizinin veya yalnızca negatif dizinlerin length özniteliğine sahip olmayacağı anlamına gelir. Lodash bunun üzerinde toplanmalı ve diziye length özniteliği verilmemelidir, bu da tutarlılığı ve performansı koruyacaktır, dolayısıyla herhangi bir çıktı oluşturmayacaktır.

6
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

İlişkisel bir dizi, bir Javascript nesnesinden başka bir şey olmayan bir dizi anahtar değer çiftidir. Durumda - myArray.length === 0, Sadece dizi nesnesine özellikler ekleyerek, gerçek diziye herhangi bir değer eklemiyorsunuz.

yerine forIn

var myArray = {}; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 

lodash.forIn(myArray, function(value, key) { 
    console.log(key + " : " + value); 
}); 

VEYA sadece

var myArray = { 
    valOne : 1, 
    valTwo : 2, 
    valThree : 3 
    }; 

    lodash.forIn(myArray, function(value, key) { 
     console.log(key + " : " + value); 
    }); 

ilişkisel dizi olarak Nesne hakkında daha fazla kullanarak aracılığıyla bu ve döngü gibi myArray başlatmak here