Как реализовать именованный кортеж Python в JavaScript - PullRequest
6 голосов
/ 28 ноября 2011

Как бы я реализовал именованный кортеж python в 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 используют меньше памяти, чем списки.Это предположение разумно?

1 Ответ

5 голосов
/ 28 ноября 2011

Вы можете просто использовать что-то вроде

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 реализует каждую конструкцию.Я подозреваю, что массив будет потреблять меньше памяти, чем объект, но разница между простыми объектами (как здесь) и массивами, вероятно, не очень значительна.

...