2015-05-13 17 views
5

quindi so come impostare la chiave in modo dinamico in questo modo:Imposta la chiave dinamicamente all'interno della mappa() in javascript?

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

ma non ho visto alcuna risposta per quanto riguarda map():

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

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

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

So che posso fare questo in un ciclo for e tale, ma questo non è possibile in javascript utilizzando solo map()?

risposta

4

È necessario ottenere someValue da valutare come valore. Se si utilizza la notazione dell'oggetto, verrà interpretata letteralmente come stringa.

è possibile utilizzare un oggetto temporaneo per ottenere ciò che si vuole:

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

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

Sì, non è possibile creare una definizione di oggetto letterale JS che utilizza un nome di variabile per il nome di una proprietà. Pertanto, è necessario dichiarare un oggetto e quindi assegnare la proprietà (utilizzando il nome della proprietà nella variabile) separatamente come fa questa risposta. – jfriend00

0

Comunemente la 'mappa()' metodo viene utilizzato per ottenere nuova matrice di ogni valore di ritorno. Nel tuo caso, ti consiglio di usare forEach().

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

O uso oggetto() della libreria underscore.js

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

Poi di nuovo, Array.prototype.map viene utilizzato solo per ottenere il nuovo 'allineamento' non e 'oggetto'.

Problemi correlati