我需要的是从数组中获取特定项(由数组定义索引)。 假设我有这个源数组[2,4,1,6,8]和这个索引数组[0,3],我希望结果为[2,6]。 到目前为止,我这样做是为了实现结果
var iter = -1;
source.filter(function(item) {iter++; if (indices.indexOf(iter)>-1) {return item}})
有没有比这更优雅的解决方案(也许是一些我不知道的javascript语法糖)?
答案 0 :(得分:4)
这项特殊任务没有语法糖,但更简单的方法是:
var destination = [];
indices.forEach(function(index) {
destination.push(source[index]);
});
答案 1 :(得分:3)
您可以使用地图:
var source = [2, 4, 1, 6, 8];
var indices = [0, 3];
var output = indices.map(function(i){
return source[i]
});
答案 2 :(得分:2)
最好在尝试访问之前检查原始数组是否包含索引。
var original = [1,2,3,4,5,6,7,8,9,10];
var indicesSafe = [2,6];
var indicesUnsafe = [2,1234];
function filter(original, indices) {
var result = [];
for (var i = 0; i < indices.length; i++) {
var index = indices[i];
// Check if index exists
if (original.length > index) {
// If so push onto return value
result.push(original[index]);
}
}
return result;
}
// Safe
var resultSafe = filter(original, indicesSafe);
// Unsafe
var resultUnsafe = filter(original, indicesUnsafe);
document.getElementById('output').innerHTML += JSON.stringify(resultSafe);
document.getElementById('output').innerHTML += "\n" + JSON.stringify(resultUnsafe);
&#13;
<pre id="output"></pre>
&#13;
答案 3 :(得分:0)
这就是我要做的事情:
var dataArray = [2,4,1,6,8];
var indicesArray = [0,3];
var resultArray = [];
for (var i=0; i<indicesArray.length; i++) {
resultArray.push(dataArray[i]);
}
答案 4 :(得分:0)
如果您正在考虑使用图书馆,可以使用lodash _.at
_.at(['a', 'b', 'c'], [0, 2]);
// → ['a', 'c']
_.at(['barney', 'fred', 'pebbles'], 0, 2);
// → ['barney', 'pebbles']