我有两个JavaScript数组:
window.sqlitePlugin.openDatabase({name: 'test.db', location: 'default'});
setTimeout(function(){
tx.executeSql('CREATE TABLE IF NOT EXISTS test (loc_emp_lat, loc_emp_long, loc_emp_accuracy, loc_emp_local_time)');
},4000);
我希望另一个数组从array1获取元素,其中数组2的相应元素在同一位置匹配条件。两个数组必须具有相同的元素。
例如: 我想要array1的元素,其中array2的相应元素是0
var array1 = ['a','b','c','d'];
var array2 = [ 1, 0, 0, 1 ];
另一个例子: 我想要array1的元素,其中array2的相应元素是1
Result = ['b','c']
我在Lodash或Underscore Js Libraries上寻找一个功能来执行此操作。我可以使用vanilla javascript来实现它,但我很想知道是否可以使用这些库来完成。
答案 0 :(得分:2)
它与普通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(_.filter(array1, (a, i) => array2[i] === 0));
console.log(_.filter(array1, (a, i) => array2[i] === 1));

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
答案 1 :(得分:2)
这可以通过在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))});
// positives
pos = _.filter(array1, _.iter(array2))
console.log(pos)
// negatives
neg = _.reject(array1, _.iter(array2))
console.log(neg)
// both
group = _.groupBy(array1, _.iter(array2))
console.log(group)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
答案 2 :(得分:2)
_.chain()
.zip(array1, array2)
.filter(_.property(1))
.map(0)
.value();
您可以通过否定过滤谓词来获取零值,如下所示:
_.chain()
.zip(array1, array2)
.filter(_.negate(_.property(1)))
.map(0)
.value();
答案 3 :(得分:1)
您可以创建自定义函数并使用filter()
,但两个数组的长度必须相同。
var array1 = ['a', 'b', 'c', 'd'];
var array2 = [1, 0, 0, 1];
function filterBy(el) {
return array1.filter(function(e, i) {
return array2[i] == el;
})
}
console.log(filterBy(0))
console.log(filterBy(1))