javascript - 对于在所有迭代中最终为真的每个条件,将计数器值插入一个新数组

标签 javascript arrays for-loop

我有多个数组,但其中一些数组的值为 0 或未定义。我想做的是,每次条件成立时,将计数器值插入一个新数组。

let array1 = [5, 6, 44, 2, 6];
let array2 = ['', '', '', 5 , 7];

我已经做到了这一点,但它只返回唯一的值。意思是,假设我们有上面的两个数组,第一个具有所有值 - array1,第二个没有 - array2 (索引 0, 1, 2 为空,但索引3和4有其数值)。下面的函数返回 --> [1, 2].

empNum = (data) => {
let activeArr = [];
let activeOnes = 0;
    for (let i=0; i<data.length; i++) {
        if (active[i] !== 0 && active[i] !== '') {
            activeOnes ++;
            activeArr.push(activeOnes);
        }

    }
    return activeArr;  // [1, 2 ] < -- This is not what I need.
}

在前 3 次运行中,只有一个数组通过条件 [1, 1, 1],但在第 4 次和第 5 次运行中,两个数组都通过了测试,因此接下来的两项应该是 [2, 2] .

所以,我想要实现的是一个如下所示的新数组 - [1, 1, 1, 2, 2]

注意: 数组的数量不是两个。还有许多其他的,长度都相同,并且它们的数量(数组的数量)可以随着时间的推移而增长,以及每个数组中的条目数,但最后,它们所有的长度仍然相同。

也许是其他类型的循环?有什么建议吗?

最佳答案

我认为这里最好的做法是在测试真实性后将两个数组映射到一个数组中:

let array1 = [5, 6, 44, 2, 6];
let array2 = ['', '', '', 5 , 7];

const result = array1.map((item1, i) => {
  const item2 = array2[i];
  return Boolean(item1) + Boolean(item2); // gets converted to number
});
console.log(result);

当然,这是假设数组具有相同数量的元素。如果没有,您可以先对两个数组的长度使用 Math.max

如果有多个数组,请先将它们放入一个数组中,然后迭代该数组:

const arrs = [
  [5, 6, 44, 2, 6],
  ['', '', '', 5 , 7],
];
const { length } = arrs[0];
const result = Array.from(
  { length },
  (_, i) => arrs.reduce((a, arr) => a + Boolean(arr[i]), 0)
);
console.log(result);

或者您可能更愿意只访问每个子数组一次:

const arrs = [
  [5, 6, 44, 2, 6],
  ['', '', '', 5 , 7],
];
const { length } = arrs[0];
const result = [];
arrs.forEach(arr =>
  arr.forEach((item, i) => result[i] = (result[i] || 0) + Boolean(item))
);
console.log(result);

关于javascript - 对于在所有迭代中最终为真的每个条件,将计数器值插入一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826088/

相关文章:

javascript - 与私有(private)成员创建对象时的技术差异

javascript - 如何在 Typescript 中用静态变量表达构造函数?

php - jquery - 选择所有带有 js 数组名称的复选框

javascript - 如何获取每个数组中的乘法结果

javascript - 不要从 DOM 加载或删除元素

javascript - 如何通过 AJAX 发送数千个对象?

c - 使用 stdlib 的 qsort() 对字符串数组进行排序

java - For循环逻辑运行但没有意义

java - 数组和 For 循环 (JAVA)

c++ - 我无法理解为什么在此 for 循环中输出为 10