我有多个数组,但其中一些数组的值为 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/