从数组中获取特定项目

时间:2015-07-14 06:26:05

标签: javascript

我需要的是从数组中获取特定项(由数组定义索引)。 假设我有这个源数组[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语法糖)?

5 个答案:

答案 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;
&#13;
&#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']