如何根据索引数组获取对应的值数组?

25

我有一组两个数组。其中一个包含一些水果值作为字符串,另一个包含一些随机数字。在这里,我认为数字数组是水果数组的索引。如何根据索引数组中的数字获取新的水果数组?

示例代码:

var resultArr = [];
var fruitier = ["apple", "orange", "grapes", "pineapple", "fig", "banana", "jackfruit", "pomegranate"];
var indexArr = [0, 2, 4];

输出:

resultArr = ["apple", "grapes", "fig"];
6个回答

59

使用 .map 方法:

let resultArr = indexArr.map(i => fruitier[i])

12
如果你想在 lodash 中实现这个功能,请使用 _.at()

var fruitier = ['apple', 'orange', 'grapes', 'pineapple', 'fig', 'banana', 'jackfruit', 'pomegranate'];
var indexArr = [0, 2, 4];
var resultArr = _.at(fruitier, indexArr);

console.log(resultArr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>


1
请注意,如果您使用Flow类型,则会出现错误,因为_.at()期望第一个参数为Object而不是Array。我认为可以使用// $FlowFixMe忽略它。 - elquimista

5
for(var i = 0; i < indexArr.length; i++)
  resultArr.push(fruitier[indexArr[i]]);

1

Array#map工作正常(文档

const getFromIndex = (array, indexes) => indexes.map((index) => array[index]);

你也可以使用 Array#filter(文档)功能。
const fruitier = ['apple', 'orange', 'grapes', 'pineapple', 'fig',   'banana', 'jackfruit', 'pomegranate'];
const indexArr = [0, 2, 4];  

const getFromIndex = (array, indexes) => {
  return array.filter((element, index) => indexes.includes(index)); 
};

或者也可以使用 Array#reduce(文档

const getFromIndex = (array, indexes) => {
    return indexes.reduce((result, i) => result.concat(array[i]), []); 
};

1
使用lodash pullAt
var fruitier = ["apple", "orange", "grapes", "pineapple", "fig", "banana", 
"jackfruit", "pomegranate"];
var indexArr = [0, 2, 4];
var resultArr = _.pullAt(fruitier, indexArr);
console.log(resultArr);
// ["apple", "grapes", "fig"]

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>

需要注意的是,与上述 _.at() 推荐方法相比,这种方法会改变输入数组。


0
你可以使用 for..of 循环。
for (var key of indexArr) resultArr[resultArr.length] = fruitier[key];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接