我有两个数组:
arr1 = [0,1,1,0]
arr2 = [a,b,c,d]
我想找到arr2 [i]的值和相应的索引,其中i使得arr1 [i]!= 0而不循环通过arr2中的每个位置。哪些有效的技术可以完成以下任务:
arr2.forEach( ( 'element with index such that arr1[index] != 0') => {} );
**编辑**这个问题的最初发布尚不清楚是否需要记录满足条件的元素的索引。
答案 0 :(得分:1)
编辑:获取索引也很容易-更新了答案
你说你不想通过ARR2循环,但你的可能的做的是循环遍历ARR1和收集ARR2每次各自的价值,你得到像这样一击:
let result = []
arr1.forEach((value, idx) => {
if (value !== 0) result.push({index: idx, value: arr2[idx]})
}
虽然这似乎是那种在你的需求的黑客。 除此之外,我不认为你有另一种选择,但遍历要么阵列(优化:只遍历最小的一个)。
如果你想完整的结果,你必须检查ARR2的每一个元素的条件,因为如果你不存在的可能的仍然是从你的结果缺少某些元素。
答案 1 :(得分:1)
对此的另一种解决方案是在arra1
上使用reduce():
const arr1 = [0,1,1,0,1];
const arr2 = ["a","b","c","d","e"];
let res = arr1.reduce(
(acc, v, idx) => v ? acc.concat({val: arr2[idx], idx}) : acc,
[]
);
console.log(res);
答案 2 :(得分:0)
只需使用filter
:
arr1 = [0,1,1,0]
arr2 = ['a','b','c','d']
console.log( arr2.filter((item, index) => arr1[index] !== 0) )
答案 3 :(得分:0)
您可以将数组1减少为所需的索引,当需要这些值时,可以将它们映射到数组2中的值。
let arr1 = [0, 1, 1, 0];
let arr2 = ['a', 'b', 'c', 'd'];
let indexes = arr1.reduce((results, val, index) => {
if (val) {
results.push(index);
}
return results;
}, []);
console.log(indexes);
let vals = indexes.map(idx => arr2[idx]);
console.log(vals);
答案 4 :(得分:-1)
尝试$.each()
:
$(function() {
var arr1 = [0, 1, 1, 0];
var arr2 = ['a', 'b', 'c', 'd'];
$.each(arr1, function(k, v) {
if (!v) {
console.log(arr2[k]);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
很显然,数组的大小必须相同,或者arr1
可以小于arr2
。
希望有帮助。