javascript - 我不明白这个解决方案

标签 javascript

首先我要指出这段代码是有效的。那不是问题!我只是不明白到底是怎么回事。据我了解, chunked.push 方法一直在广告一个新数组。但显然,事实并非如此。它给出了正确的答案: [[ 1, 2], [3, 4], [5]]

我根本不明白这段代码中发生了什么。它吐出正确的答案,并在必要时在每个数组中放入几个项目,但代码每次都会创建一个新的子数组,不是吗?不,显然不是——但我不明白为什么不呢?请帮忙!

function chunk(array, size) {
  let workArr = [...array];
  let chunked = [];
  for (let i = 0; i < workArr.length; i++) {
    let last = chunked[chunked.length - 1];
    if (!last || last.length === size) {
      chunked.push([workArr[i]])
    } else {
      last.push(workArr[i]);
    }
  }
  return chunked;
}

以下是一些输入参数和预期结果的示例:

// chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
// chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]
// chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]]
// chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]]
// chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]

最佳答案

让我们打破它

这复制了一个数组,其中使用了展开运算符

  let workArr = [...array];

遍历 workArr 数组中的每一项

  for (let i = 0; i < workArr.length; i++) {

  }

我认为这会在第一次运行时给你 undefined,因为 chunked 中的索引 -1 处没有任何内容(因为一开始, chunked.length0),但它会将 last 设置为 chunked 数组的最后一个元素

let last = chunked[chunked.length - 1];

如果 last 有假值 (0, null, undefined, "", NaN, false) 或 last 的长度等于 size(请注意, last 应该是数组或字符串),然后将 workArr 数组的第 i 个元素(从 0 开始索引)作为数组插入 chunked 数组,否则将其插入从 workArrlast 的元素,但是 last 应该是一个数组

if (!last || last.length === size) {
      chunked.push([workArr[i]])
    } else {
      last.push(workArr[i]);
    }

然后简单地返回chunked数组

return chunked;

关于javascript - 我不明白这个解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623542/

相关文章:

javascript - 如何使用本地文件夹中的图像而不是从 jquery 中的 url 使用图像?

javascript - Socket.IO:检测断开的套接字

javascript - 使用 Promise/resolve 和 async/await 从函数返回 MySql 结果

javascript - 计时器仅在第二次单击后停止?

javascript - 一旦函数绑定(bind)了 `bind` ,它的 `this` 就不能再修改了吗?

javascript - Slidesjs 脚本 : setting a min-width to get an 100% width look

JavaScript 运行时错误 : Unable to get property 'top' of undefined or null reference

javascript - 使用 addeventlistener 阻止默认链接操作

javascript - 如何使用javascript或php获取访问者或用户的IP地址,ISP,县和城市?

javascript - 获取特定日期的所有年份日期