首页 > 解决方案 > 从提供的具有确定长度而不以 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 值。

标签: javascriptarrayssplice

解决方案


如果没有零,您可以添加另一个检查并省略不需要的零。

这种方法不会改变给定的数据。

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));


推荐阅读