使用JavaScript获取特定子数组

使用JavaScript获取特定子数组,javascript,arrays,Javascript,Arrays,假设我有一个数组 var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"] 我还有另一个同样大小的数组: var select = [0,1,1,1,0] 如果有意义的话,如何获取数组水果[选择]=[“橙色”、“柠檬”、“苹果”]。这在其他一些语言(如R)中很容易做到,但在JS中是否容易做到?将其谓词传递给索引,因此: fruits.filter((fruit, i) => select[i]) 让水果=[“香蕉”、“

假设我有一个数组

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]
我还有另一个同样大小的数组:

var select = [0,1,1,1,0]
如果有意义的话,如何获取数组
水果[选择]=[“橙色”、“柠檬”、“苹果”]
。这在其他一些语言(如R)中很容易做到,但在JS中是否容易做到?

将其谓词传递给索引,因此:

fruits.filter((fruit, i) => select[i])
让水果=[“香蕉”、“橘子”、“柠檬”、“苹果”、“芒果”];
让select=[0,1,1,1,0];
让结果=水果。过滤器((水果,i)=>选择[i]);
控制台日志(结果)向其谓词传递一个索引,因此:

fruits.filter((fruit, i) => select[i])
让水果=[“香蕉”、“橘子”、“柠檬”、“苹果”、“芒果”];
让select=[0,1,1,1,0];
让结果=水果。过滤器((水果,i)=>选择[i]);

控制台日志(结果)不是您想要的方式。但是,如果语法可能不完全正确,下面的内容应该可以使用

var x = 0;
var selectedFruits = []
foreach(var bit in select)
{
    if(bit == 1)
       selectedFruits.Add(fruits[x])
     x++
}

不是你想要的方式。但是,如果语法可能不完全正确,下面的内容应该可以使用

var x = 0;
var selectedFruits = []
foreach(var bit in select)
{
    if(bit == 1)
       selectedFruits.Add(fruits[x])
     x++
}

另一种解决方案是移动
select
的值进行过滤。这会变异
select
,需要绑定此数组

var fruits=[“香蕉”、“橙子”、“柠檬”、“苹果”、“芒果”],
选择=[0,1,1,1,0],
selected=fruits.filter([].shift.bind(select));

console.log(选中)另一种解决方案是移动
select
的值进行过滤。这会变异
select
,需要绑定此数组

var fruits=[“香蕉”、“橙子”、“柠檬”、“苹果”、“芒果”],
选择=[0,1,1,1,0],
selected=fruits.filter([].shift.bind(select));

console.log(选中)可能通过传递一个循环,其中if(i==1)输入值。可能通过传递一个循环,其中if(i==1)输入值。这真是聪明!不太清楚发生了什么,但一旦你弄明白了,就非常整洁了。记住,@Ry-,对于现有JS引擎上足够大的数组来说,这确实需要二次时间,只有O(2n)(仍然是O(n)),一个用于
水果
,一个用于
选择
。没有二次时间。@NinaScholz:
shift()
所用时间与数组大小成比例。(不过,V8优化了它,使其不移动小阵列的任何东西。)这真是太聪明了!不太清楚发生了什么,但一旦你弄明白了,就非常整洁了。记住,@Ry-,对于现有JS引擎上足够大的数组来说,这确实需要二次时间,只有O(2n)(仍然是O(n)),一个用于
水果
,一个用于
选择
。没有二次时间。@NinaScholz:
shift()
所用时间与数组大小成比例。(不过,V8对其进行了优化,使其不移动小型阵列的任何内容。)