Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据JavaScript中另一个数组的索引从数组中选择元素?_Javascript_Arrays - Fatal编程技术网

如何根据JavaScript中另一个数组的索引从数组中选择元素?

如何根据JavaScript中另一个数组的索引从数组中选择元素?,javascript,arrays,Javascript,Arrays,这是可行的,但我想知道是否有更好的方法按索引过滤: a = [10,20,30,40] b = [1,3] a.filter((x,i) => b.includes(i)) // [20, 40] 另一种方法是b.map(aIndex=>a[aIndex])。如果b比a短,这也可能更快。但是,如果b中存在不属于a的索引,则数组中会出现未定义的“洞” 编辑 查看数组。includes,对于未排序的数组,它看起来将以O(n)运行。 如果我们说A=A.length和B=B.length,你对这

这是可行的,但我想知道是否有更好的方法按索引过滤:

a = [10,20,30,40]
b = [1,3]
a.filter((x,i) => b.includes(i))
// [20, 40]

另一种方法是
b.map(aIndex=>a[aIndex])
。如果
b
a
短,这也可能更快。但是,如果
b
中存在不属于
a
的索引,则数组中会出现
未定义的“洞”

编辑

查看
数组。includes
,对于未排序的数组,它看起来将以O(n)运行。 如果我们说
A=A.length
B=B.length
,你对这个问题的解答应该是O(A*B)。 第二个解决方案(带有map)将在O(B)中运行。要修复
未定义的
漏洞,您可以添加一个
过滤器(element=>typeof element!==“undefined”)

最后的解决方案是
b.map(i=>a[i]).filter(e=>typeof e!==“undefined”)
。现在它在O(2*B)中运行,这应该仍然比O(A*B)更好。

我认为您的解决方案非常好<代码>地图
也是一个很好的解决方案

对于记录,您可以使用一个For…of循环,但它会变得更加复杂,而不必付出任何代价

a=[10,20,30,40],
b=[1,3];
设res=[];
for(a.entries()的常量条目){
如果(b.包括(条目[0])){
res.push(条目[1]);
}
}
控制台日志(res)这(以及更多)可以通过Lodash的功能完成:

_.at([10, 20, 30, 40], [1, 3]) // [20, 40]
_.at(['a', 'b'], [0, 1, 1, 0]) // ['a', 'b', 'b', 'a']

@Redu,这只适用于顺序Chunkstory,我的代码有一个错误。我已经更新了问题。您已经更改了问题,因此现在您必须执行
b.map(I=>a[I])
假设
b
始终在
a
中的某个项目上进行索引映射。Redu明白了。是的,这比我做的要好。我想可能会有类似于a.select(b)