javascript - 从提供的具有确定长度而不以 0 开头的数组创建新数组的好方法
问题描述
我想我实现了我的目标,但我确信这不是最好的方法。我有一个函数,并且有一个问题使它添加了一些额外的 [0],我知道这是因为 while 测试继续进行。我不需要用 while+splice 来做。我想要一些建议以使其更容易。我的目标是从一个提供的数组中创建新的数组,总是从一个不同于 0 的元素开始,并且长度将被提供为 k:
function splitNumber(arrayProvided, k) {
let newArray = [];
while (arrayProvided.length > 0) {
newArray.push(
arrayProvided.splice(
arrayProvided.findIndex(el => el),
k
)
);
}
return newArray;
}
console.log(
splitNumber([1, 0, 4, 6, 0, 7, 8, 4, 2, 0, 8, 3, 0, 0, 0, 0, 0, 0, 0, 6], 4)
);
此代码的结果是:
[
[ 1, 0 ], [ 4, 6 ],
[ 7, 8 ], [ 4, 2 ],
[ 8, 3 ], [ 6 ],
[ 0 ], [ 0 ],
[ 0 ], [ 0 ],
[ 0 ], [ 0 ],
[ 0 ], [ 0 ],
[ 0 ]
]
这部分是正确的,因为在添加额外 [0] 的工作完成后系统有额外的工作。系统不能从第一个数组位置的 0 值开始,不需要额外的 [0] (发生这种情况是因为逻辑不完全正确),是的,新数组的长度是 k 值。
解决方案
如果没有零,您可以添加另一个检查并省略不需要的零。
这种方法不会改变给定的数据。
function splitNumber(array, k) {
let result = [],
i = 0;
while (i < array.length) {
if (array[i] === 0) {
i++;
continue;
}
result.push(array.slice(i, i += k));
}
return result;
}
console.log(splitNumber([1, 0, 4, 6, 0, 7, 8, 4, 2, 0, 8, 3, 0, 0, 0, 0, 0, 0, 0, 6], 4));
推荐阅读
- elasticsearch - 模糊度超过 2 个字符的弹性搜索(距离)
- google-apps-script - 如何使用脚本在 Google 表单上禁用“回复回执”?
- javascript - 给定当前日期,如何获得过去 24 个月的最后一天?
- jquery - 使用 jQuery 对 JSON 数据进行分页?
- payment-gateway - 在贝宝快递结帐中禁止/禁用运输选项
- pandas - 在熊猫数据框中用 nan 替换任何字符串
- r - R Shiny 需要很长时间来加载数据集,尽管不是那么大
- java - Javaw.exe 应用程序未打开,Windows 10 Pro Surface Pro 4
- python - FileNotFoundError:[WinError 3] - os.rename 不起作用
- scala - 如何一次通过多个谓词过滤列表?