2011-11-28 7 views
5

¿Cómo voy a implementar Python's namedtuple en javascript? Idealmente, también me gustaría tener una función que pueda "mapear" sobre una secuencia de secuencias para convertirla en una secuencia de objetos con nombre de tictac.Cómo implementar python's namedtuple en javascript

// with underscore.js included... 
var points = [[1,2], [3,4], [4,5] 
var Point = namedlist('Point', 'x y') 
points = _.map(Point._make, points) 

point1 = points[0] 
var x = point1.x 
var y = point1.y 

Tenga en cuenta que no quiero tener que codificar una nueva clase como "punto" cada vez, pero en cambio le gustaría una función fábrica que produce una nueva clase apoyar el acceso lista de elementos con los nombres de los campos indicados.

Nota al margen: una suposición que subyace a esta pregunta es que los mapas de javascript utilizan menos memoria que las listas. ¿Es esa suposición razonable?

Respuesta

5

Se podía usar algo como

var namedlist = function(fields) { 
    return function(arr) { 
     var obj = { }; 

     for(var i = 0; i < arr.length; i++) { 
      obj[fields[i]] = arr[i];    
     } 

     return obj; 
    }; 
}; 

//use: 
var points = [[1,2], [3,4], [5,6]]; 
var Point = namedlist(['x', 'y']); 

points = _.map(Point, points); 

//Single item: 
var pt = Point([1,2]); 

cuanto a uso de la memoria, que depende de cómo el motor de JS subyacente implementa cada construcción. Mi sospecha es que una matriz consumirá menos memoria que un objeto, pero la diferencia entre los objetos simples (como aquí) y las matrices probablemente no sea muy significativa.

Cuestiones relacionadas