现在,我正在尝试创建数字大于0
的对象数组,当数字为0
时数组结束,而数字大于0
应当创建一个新的数组(因此该函数应返回一个数组数组,当中间的数字为0时将其分解。
输入和所需的输出:
input = [1,2,3,4,0,0,0,9,9,0,0]
output = [[1,2,3,4][9,9]]
我的功能(到目前为止):
function group(Array) {
let allArray = []
let runGroup = new Array()
Array.forEach(function(runtimeI,index) {
if (runtimeI > 0)
{
runGroup[i] = new Array()
runGroup[i].push(runtimeI)
}
}
)
allArray.push(runGroup[i])
}
array = [10,0,0,1,1,2,0,0,15,0,0,0,5,5,5,]
console.log(group(array))
我创建的函数引发错误,提示array is not a constructor
工作示例函数(创建我需要的结构)
var squares = new Array();
for(var i = 0; i <= 8; i++)
{
squares[i] = new Array();
for(var j = (i * 20) + 1; j <= 20 * i + 20; j++)
if (squares[i] == null)
squares[i] = j;
else
squares[i].push(j);
}
console.log(squares)
所以我想我的问题是,forEach无法执行for循环吗?我还有另一种方法可以做到这一点吗?
答案 0 :(得分:2)
如果您要处理较小的数组,则结合使用连接和拆分是清除0的简洁方法...
let input = [1,27,3,4,0,0,0,9,9,0,0];
let arrays = input.join('&').split('&0');
let output = arrays.filter(a => a).map(s => s.split('&').filter(s => s).map(s => parseInt(s)))
console.log(output);
英语:Join产生一个包含所有输入数字的字符串。拆分为“ 0”会生成一个数组数组,在定界符(“ 0”)处为空。删除空的空格,然后再次拆分以产生数字数组。
或者,当您的OP开始时,它可能更适合使用较大的迭代样式的大型数组。
let input = [1, 27, 3, 4, 0, 0, 0, 9, 9, 0, 0];
let output = [];
let runGroup = [];
input.forEach(num => {
if (num === 0) {
if (runGroup.length) {
output.push(runGroup);
runGroup = [];
}
} else {
runGroup.push(num);
}
});
console.log(output);
答案 1 :(得分:1)
您可以按以下方式滥用split / join方法
// Build a string from your initial array
var step1 = input.join('#')
// Remove the '0' and build arrays around it
var step2 = step1.split('#0')
// Filter empty values
var step3 = step2.filter(v => v)
// Build the final result
var output = step3.map(v => v.split('#').filter(s => s))
答案 2 :(得分:0)
您的代码中至少有一个问题-在Array.forEach
中,您使用索引i
而不是index
。或者,您可以使用以下代码
input = [1,2,3,4,0,0,0,9,9,0,0]
output = input.join().replace(/(,0)+/g,'-').replace(/-$/,'')
.split('-,').map(x=>x.split(',').map(y=>+y))
console.log(JSON.stringify(output));