是否有使用索引数组访问数组元素的快捷方式,而不是一次只能使用一个索引?
示例(这不起作用):
var array = ["One", "Two", "Three", "Four"];
var indices = [1, 3];
var result = array[indices];
结果将是[“Two”,“Four”]。
答案 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);