2011-11-28 8 views
5

javascriptでpythonのnamedtupleを実装するにはどうすればいいですか?理想的には、一連のシーケンスを「マップ」して名前付きタプルのようなオブジェクトのシーケンスにする機能が必要なのも理想的です。私はしたくないjavascriptでpythonのnamedtupleを実装する方法

// 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 

注「ポイント」毎回のように新しいクラスをコーディングする必要があるとし、代わりに指定されたフィールド名を持つリスト項目へのアクセスをサポートする新しいクラスを作成するファクトリ関数をしたいと思います。

サイドノート:この質問の根底にある仮定は、javascriptマップが使用するメモリが少ないことです。その仮定は合理的ですか?

答えて

5

あなただけのメモリ使用量については

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

のようなものを使用することができ、それは根本的なJSエンジンは、各構築物を実装する方法によって異なります。私の疑問は、配列はオブジェクトより少ないメモリしか消費しないということですが、単純なオブジェクト(ここのような)と配列の違いはおそらくそれほど重要ではありません。

関連する問題