2011-11-28 32 views
5

W jaki sposób podjąłbym się wdrożenia pakietu nazwanego Pythona w javascript? Idealnie chciałbym również funkcji, którą mógłbym "odwzorować" na sekwencję sekwencji, aby przekształcić ją w sekwencję obiektów o podobnej nazwie.Jak zaimplementować python's namedtuple w 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 

Zauważ, że nie chcę mieć do kodowania nowej klasy jak „punkt” za każdym razem, ale zamiast chciałby funkcję fabryki, która produkuje nową klasę wspieranie dostępu elementu listy z podanymi nazwami pól.

Uwaga boczna: założeniem leżącym u podstaw tego pytania jest to, że mapy javascript używają mniejszej ilości pamięci, która się na liście. Czy to założenie jest uzasadnione?

Odpowiedz

5

Można po prostu użyć czegoś podobnego

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]); 

Jeśli chodzi o zużycie pamięci, to zależy od tego, jak bazowy silnik JS realizuje każdego konstruktu. Podejrzewam, że tablica zużyje mniej pamięci niż obiekt, ale różnica pomiędzy prostymi obiektami (takimi jak tutaj) i tablicami prawdopodobnie nie jest zbyt znacząca.