这可行,但是我想知道是否有更好的方法来按索引过滤:
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
,则最终会undefined
在数组中出现“孔”。
编辑
稍微Array.includes
看一下,它将对未排序的数组以O(n)运行。如果我们说A = a.length
和B = b.length
,那么您从问题中得到的解决方案应在O(A * B)中运行。第二个解决方案(带有地图)将在O(B)中运行。要修复undefined
孔,可以添加.filter(element => typeof element !== 'undefined')
。最终的解决方案将是b.map(i => a[i]).filter(e => typeof e !== 'undefined')
。现在它在O(2 * B)中运行,它应该仍然比O(A * B)更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句