Javascript 根据另一个-Lodash的对应值获取数组元素

Javascript 根据另一个-Lodash的对应值获取数组元素,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,我有两个JavaScript数组: var array1 = ['a','b','c','d']; var array2 = [ 1, 0, 0, 1 ]; 我想要另一个数组从array1中获取元素,其中位于相同位置的数组2的对应元素匹配一个条件。两个数组必须具有相同的元素 例如: 我想要array1的元素,其中array2的对应元素是0 Result = ['b','c'] 另一个例子: 我想要array1的元素,其中array2的对应元素是1 Result = ['a','d']

我有两个JavaScript数组:

var array1 = ['a','b','c','d'];
var array2 = [ 1,  0,  0,  1 ];
我想要另一个数组从array1中获取元素,其中位于相同位置的数组2的对应元素匹配一个条件。两个数组必须具有相同的元素

例如: 我想要array1的元素,其中array2的对应元素是0

Result = ['b','c']
另一个例子: 我想要array1的元素,其中array2的对应元素是1

Result = ['a','d']

我正在Lodash或Underline Js库中寻找一个函数来实现这一点。我可以使用普通javascript实现它,但我很好奇这些库是否可以实现这一点。

这与普通javascript中的相同

filtered0 = array1.filter((_, i) => array2[i] === 0);
filtered1 = array1.filter((_, i) => array2[i] === 1);
var array1=['a'、'b'、'c'、'd'], array2=[1,0,0,1]; console.log_u.filterarray1,a,i=>array2[i]==0; console.log_u.filterarray1,a,i=>array2[i]==1;
这与普通Javascript中的相同

filtered0 = array1.filter((_, i) => array2[i] === 0);
filtered1 = array1.filter((_, i) => array2[i] === 1);
var array1=['a'、'b'、'c'、'd'], array2=[1,0,0,1]; console.log_u.filterarray1,a,i=>array2[i]==0; console.log_u.filterarray1,a,i=>array2[i]==1;
您可以创建自定义函数并使用过滤器,但两个数组的长度必须相同

var array1=['a','b','c','d']; var array2=[1,0,0,1]; 函数过滤器{ 返回数组1.FilterFunction,i{ 返回数组2[i]==el; } } console.logfilterBy0
console.logfilterBy1您可以创建自定义函数并使用过滤器,但两个数组的长度必须相同

var array1=['a','b','c','d']; var array2=[1,0,0,1]; 函数过滤器{ 返回数组1.FilterFunction,i{ 返回数组2[i]==el; } } console.logfilterBy0
console.logfilterBy1通过向lodash添加以下方法,可以优雅地完成此操作:

_.mixin({'iter': xs => (w => () => w.next().value)(_(xs))})
基本上,它返回一个迭代数组的函数,也就是说,每次调用都返回下一个数组元素。使用iter,您的问题很简单:

var array1=[a'、'b'、'c'、'd']; var array2=[1,0,0,1]; _.mixin{'iter':xs=>w=>=>w.next.value_xs}; //积极的 位置=u.filterarray1,u.Iterary2 console.logpos //底片 负=u0.rejectarray1,0.Iterary2 console.logneg //两者 组=u.groupByarray1,u.iteray2 控制台日志组
通过向lodash中添加以下方法,可以优雅地完成此操作:

_.mixin({'iter': xs => (w => () => w.next().value)(_(xs))})
基本上,它返回一个迭代数组的函数,也就是说,每次调用都返回下一个数组元素。使用iter,您的问题很简单:

var array1=[a'、'b'、'c'、'd']; var array2=[1,0,0,1]; _.mixin{'iter':xs=>w=>=>w.next.value_xs}; //积极的 位置=u.filterarray1,u.Iterary2 console.logpos //底片 负=u0.rejectarray1,0.Iterary2 console.logneg //两者 组=u.groupByarray1,u.iteray2 控制台日志组 你可以这样做:

_.chain()
  .zip(array1, array2)
  .filter(_.property(1))
  .map(0)
  .value();
_.chain()
  .zip(array1, array2)
  .filter(_.negate(_.property(1)))
  .map(0)
  .value();
可以通过对筛选器谓词求反来获得零值,如下所示:

_.chain()
  .zip(array1, array2)
  .filter(_.property(1))
  .map(0)
  .value();
_.chain()
  .zip(array1, array2)
  .filter(_.negate(_.property(1)))
  .map(0)
  .value();
你可以这样做:

_.chain()
  .zip(array1, array2)
  .filter(_.property(1))
  .map(0)
  .value();
_.chain()
  .zip(array1, array2)
  .filter(_.negate(_.property(1)))
  .map(0)
  .value();
可以通过对筛选器谓词求反来获得零值,如下所示:

_.chain()
  .zip(array1, array2)
  .filter(_.property(1))
  .map(0)
  .value();
_.chain()
  .zip(array1, array2)
  .filter(_.negate(_.property(1)))
  .map(0)
  .value();

作品谢谢。对于非EC6鉴赏家来说,这是代码:console.log_2;.filterarray1,function,i{returnarray2[i]==0};作品谢谢。对于非EC6鉴赏家来说,这是代码:console.log_2;.filterarray1,function,i{returnarray2[i]==0};凉的这是我最需要的,但投入很大!谢谢,酷。这是我最需要的,但投入很大!谢谢。或更简单:_array1.ziparray2.reject1.map0.value或更简单:_array1.ziparray2.reject1.map0.value