Javascript 根据另一个-Lodash的对应值获取数组元素
我有两个JavaScript数组: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']
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