2015-05-13 18 views
5

Więc wiem jak ustawić klucz dynamicznie tak:Ustaw klucz dynamicznie wewnątrz mapy() w javascript?

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

Ale ja nie widziałem żadnej odpowiedzi dotyczącej map():

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

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

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

wiem, że mogę to zrobić w pętli i for takie, ale czy to nie jest możliwe w javascript używając tylko map()?

Odpowiedz

4

Musisz uzyskać wartość someValue, która ma być oceniona. Jeśli używasz notacji obiektowej, zostanie ona zinterpretowana dosłownie jako ciąg.

Można użyć tymczasowy obiekt, aby osiągnąć to, co chcesz: metoda

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

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

Tak, nie można utworzyć definicji obiektu literowego JS, która używa nazwy zmiennej dla nazwy właściwości. Jako takie, musisz zadeklarować obiekt, a następnie przypisać właściwość (używając nazwy właściwości w zmiennej) osobno, tak jak ta odpowiedź. – jfriend00

0

Powszechnie do „map()” jest używany, aby dostać nową tablicę z każdej wartości zwracanej. W twoim przypadku polecam używać dlaEach().

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

lub użyć Object() z underscore.js biblioteki

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

Potem znowu, Array.prototype.map służy tylko dostać nową tablicę '' nie '' obiektu.