2015-05-13 15 views
5

Yani böyle dinamik anahtarı ayarlamak için biliyorum:Anahtar dinamik olarak haritada() javascript olarak mı ayarlanır?

var hashObj = {}; 
hashObj[someValue] = otherValue; 

Ama map() ilgili herhangi bir cevap görmedim:

var list = ['a', 'b', 'c']; 

var hashObject = list.map(function(someValue) { 
    return { someValue: 'blah' }; 
}); 

// should return: [ {'a': 'blah'}, {'b': 'blah'}, {'c': 'blah'} ]; 

Ben for döngü içinde bunu yapabilirsiniz biliyorum ve böyle, ama bu sadece map() kullanarak javascript mümkün değil mi?

cevap

4

Değeri olarak değerlendirilmek üzere someValue almanız gerekir. Nesne gösterimi kullanırsanız, tam anlamıyla dize olarak yorumlanacaktır.

Ne istediğini elde etmek için geçici bir nesne kullanabilirsiniz:

var list = ['a', 'b', 'c']; 

var hashObject = list.map(function(someValue) { 
    var tmp = {}; 
    tmp[someValue] = 'blah'; 
    return tmp; 
}); 
+0

Evet, özellik adı için değişken adı kullanan bir JS literal nesne tanımı oluşturamazsınız. Bu nedenle, bir nesneyi bildirmeniz ve ardından bu yanıtın yaptığı gibi (değişkende özellik adını kullanarak) özelliği ayrı ayrı atamanız gerekir. – jfriend00

0

Yaygın 'haritası()' yöntemi her dönüş değerinden yeni bir dizi elde etmek için kullanılır. Senin durumunda, forEach() kullanmanızı öneririm. underscore.js kütüphanenin

var list = ['a','b','c']; 
var hashObject = {}; 
list.forEach(function(key) { 
    hashObject[ key ] = 'blah'; 
}); 

ya da kullanım amacı,()

var list = ['a','b','c']; 
var hashObject = _.object(list); // { a: undefined, b: undefined, c: undefined } 
hashObject = _.mapObject(hashObject, function(val, key) { 
    return 'blah'; 
}); 

Sonra tekrar, Array.prototype.map yalnızca yeni 'dizi' değil 'nesne' elde etmek için kullanılır.

İlgili konular