2

是否有使用索引数组而不是一次访问一个索引来访问数组元素的快捷方式?

示例(这不起作用):

var array = ["One", "Two", "Three", "Four"];
var indices = [1, 3];
var result = array[indices];

结果将是 ["Two", "Four"]。

4

3 回答 3

2

如果您对在您的环境中扩展本机原型没有疑虑,您可以制作一个并将其提供给所有数组。

Array.prototype.atIndices = function(ind) {
    var result = [];
    for (var i = 0; i < arguments.length; i++) {
        if (arguments[i] in this)
            result.push(this[arguments[i]])
    }
    return result;        
}

var result = array.atIndices(1,3);

您还可以让它检查是否传递了一个数组,或者索引和数组的混合。

Array.prototype.atIndices = function(ind) {
    var result = [];
    for (var i = 0; i < arguments.length; i++) {
        if (Array.isArray(arguments[i]))
            result.push.apply(result, this.atIndices.apply(this, arguments[i]))
        else if (arguments[i] in this)
            result.push(this[arguments[i]])
    }
    return result;        
}

这实际上会使所有数组变平,因此它们可以嵌套得尽可能深。

var result = array.atIndices(1, [3, [5]]);
于 2013-08-06T18:15:53.817 回答
2

现在有:

function pluck(arr, indices) {
    var result = [],
        i = 0,
        len = indices.length;

    for (; i < len; i++) {
        result.push(arr[indices[i]]);
    }

    return result;
}
于 2013-08-06T18:18:55.833 回答
0

作为滚动自己的替代方案,如果您可以访问 Lo-Dash(您应该完全使用它,因为它很棒)它的at功能完全符合您的要求。

你的用法是:

var result = _.at(array, indices);

请参阅: http: //lodash.com/docs#at

于 2013-08-06T18:21:13.697 回答