JavaScript: 通过索引从数组中获取子数组

9

有没有一行代码可以通过索引从数组中获取子数组?

例如,假设我想通过[0,2,4]["a","b","c","d","e"]获取["a","c","e"]。如何使用一行代码实现这个目标?类似于["a","b","c","d","e"][0,2,4]的语法。

4个回答

22

您可以使用map函数;

var array1 = ["a","b","c"];
var array2 = [0,2];
var array3 = array2.map(i => array1[i]);
console.log(array3);


1
我实际上比我的答案更喜欢这个。可能也更快。 - klugjo
有没有一种方法可以不必遍历数组?比如直接从索引中提取或类似的东西? - Carlos Delgado

6
您可以使用 filter

const arr = ['a', 'b', 'c'];
const indexes = [0, 2];

const result = arr.filter((elt, i) => indexes.indexOf(i) > -1);

document.body.innerHTML = result;


你是什么意思? - klugjo
@NinaScholz OP 没有要求这个。 - Alexis
const indexes = [2, 2]; 请尝试 @klugjo - Muhammet Can TONBUL
@MuhammetCanTONBUL:考虑到OP试图做什么,这是相当愚蠢的输入。 - Cerbrus
1
它确实有效,它返回 ['c'],这正是我们想要的。我猜问题没有说明。 - klugjo
我只是回答 klugjo 的问题:“你的意思是什么?”哦,@NinaScholz 的问题被删除了。 - Muhammet Can TONBUL

5
你可以使用Array#filterArray#includes的组合。

const array = ['a','b','c'];
console.log(array.filter((x,i) => [0,2].includes(i)));


简单明了。虽然我会为索引数组使用变量。 - Cerbrus
@Cerbrus 我最初用了一个变量,但后来我认为将其内联更加直观。 - Weedoze
好的,没问题 :-) 无论如何,点赞+1 - Cerbrus
@Cerbrus 感谢您的评论!总是很高兴收到赞美 :-D - Weedoze

4
您可以使用Array.prototype.reduce()

const arr = ['a', 'b', 'c', 'd', 'e'];
const indexes = [0, 2, 4];

const result = indexes.reduce((a, b)=> {
a.push(arr[b]);
return a;
}, []);

console.log(result);


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