当索引满足其他条件时,查找Javascript数组元素的值和索引

时间:2019-01-30 22:30:12

标签: javascript arrays

我有两个数组:

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') => {} );

**编辑**这个问题的最初发布尚不清楚是否需要记录满足条件的元素的索引。

5 个答案:

答案 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

希望有帮助。