Javascript - 使用索引数组访问数组的元素

时间:2013-08-06 18:08:08

标签: javascript

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

示例(这不起作用):

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

结果将是[“Two”,“Four”]。

3 个答案:

答案 0 :(得分: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]]);

答案 1 :(得分:2)

现在有:

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

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

    return result;
}

答案 2 :(得分:0)

作为滚动自己的替代方法,如果你有权访问Lo-Dash(你应该完全使用它,因为它很棒),它的at函数完全符合你的要求。

您的用法是:

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

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