8

Pythonのnamedtupleを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

毎回「Point」のような新しいクラスをコーディングする必要はありませんが、代わりに、指定されたフィールド名でリストアイテムへのアクセスをサポートする新しいクラスを生成するファクトリ関数が必要です。

補足:この質問の根底にある仮定は、JavaScriptマップがリストするメモリの使用量が少ないということです。その仮定は合理的ですか?

4

1 に答える 1

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エンジンが各構成をどのように実装するかによって異なります。私の疑惑は、配列はオブジェクトよりも少ないメモリを消費するということですが、単純なオブジェクト(ここのような)と配列の違いはおそらくそれほど重要ではありません。

于 2011-11-28T07:03:10.647 に答える