gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:52:20 27 4
gpt4 key购买 nike

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

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.
}

在前三次运行中,只有一个数组通过了条件 [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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com