2010-09-26 7 views

Respuesta

14

Sólo iterar sobre la matriz y luego crear el dígito:

var obj = {}; 
for(var i = 0, l = colors.length; i < l; i++) { 
    obj[colors[i]] = true; 
} 
var hash = new Hash(obj); 

También puede crear un nuevo objeto Hash desde el principio:

var hash = new Hash(); 
for(var i = 0, l = colors.length; i < l; i++) { 
    hash.set(colors[i], true); 
} 

puedo sugerir a echar un vistazo a la documentation .

+0

Aparte de las primitivas, como cadenas, números, booleanos, etc. –

+1

@Marcel: No soy estoy bastante seguro de cómo se manejan internamente, pero creo que también son objetos. –

+2

Tampoco estoy seguro de cómo los motores JS los manejan internamente, pero las cadenas, números y booleanos definitivamente no son objetos de acuerdo con la [especificación ECMAScript] (http://ecma262-5.com/ELS5_Section_8.htm#Section_8). Por ejemplo, cuando se usan los métodos 'String', una primitiva de cadena se convierte temporalmente en un objeto, se llama al método y el objeto' String' se convierte de nuevo a una primitiva de cadena. También observe que todos los objetos deben evaluar a 'verdadero', mientras que los primitivos pueden evaluar' falso'. Por ejemplo: 'var yes = new Boolean (false); if (yes) alert ("I <3 JavaScript"); 'outputs' I <3 JavaScript' –

0

Gracias a todos

aquí está mi solución utilizando prototypejs e inspirado por la respuesta de Félix

var hash = new Hash(); 
colors.each(function(color) { 
    hash.set(color, true); 
}); 
8

Esta solución Javascript funcional utiliza Array.prototype.reduce():

['red', 'green', 'blue'] 
.reduce((hash, elem) => { hash[elem] = true; return hash }, {}) 

Parameter Details:

  • devolución de llamada - Función para ejecutar en cada valor de la matriz.
  • initialValue - Objeto a usar como primer argumento para la primera llamada de la devolución de llamada.

El tercer argumento para la devolución de llamada es el índice del elemento actual que se está procesando en la matriz. Así que si desea crear una tabla de búsqueda de elementos a su índice:

['red', 'green', 'blue'].reduce(
    (hash, elem, index) => { 
    hash[elem] = index++; 
    return hash 
    }, {}); 

Devuelve:

Object {red: 0, green: 1, blue: 2} 
+0

Si esto no funciona, asegúrese de no haber olvidado el último parámetro-- ', {}'. Sin eso obtienes solo el primer valor. –

Cuestiones relacionadas