【问题标题】:How is push method updating "chunked" array without accessing object?push 方法如何在不访问对象的情况下更新“块”数组?
【发布时间】:2021-10-27 00:20:57
【问题描述】:

我了解下面函数的逻辑,但我不明白这些值是如何添加到chunked 数组中的。该代码通过在每次迭代中向last 添加一个元素并在last 的长度等于size 时“分块”来返回[[1,2,3],[4,5,6],[7]]。但是,代码不会在任何地方更新“分块”数组。即chunked.push(element)chunked.push(last)

function chunk(array, size) {
  const chunked = [];
  const test = [];
  for (let element of array) {
    const last = chunked[chunked.length - 1];

    console.log("This is last: " + last)
    
    if (!last || last.length === size) {
      chunked.push([element]);
    } else {
      last.push(element);
    }
  }
  console.log('test : ', test);
  return chunked;
}

chunk([1, 2, 3, 4, 5, 6, 7], 3)

【问题讨论】:

  • chunked 包含对last 的引用,它会推送到last
  • 谢谢,我想我明白了。将两个数组设置为彼此时,我没有意识到在 java 脚本中改变一个会改变另一个
  • 不是两个数组。这是对同一个数组的两个引用。

标签: javascript arrays declaration variable-declaration


【解决方案1】:

在第一次迭代中,last 未定义,因此条件

if (!last || last.length === size)`

是真的。所以它执行chunked.push([element])

然后在下一次迭代中

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

这会将last 设置为之前推入数组的[element] 数组。因此,当它执行last.push(element) 时,它会添加到该数组中。

然后,每当嵌套数组填满 size 元素时,if 条件就会为真,它将另一个嵌套数组推入 chunked

【讨论】:

  • 谢谢,我理解逻辑崩溃,正如我提到的,我不理解用“元素”更新“分块”的机制,例如last.push(element) 这不是last.push(element) 只是将element 添加到last 吗?看来这应该是chunked.push(element)
  • 它是嵌套数组。您将一个元素推送到内部数组,然后将内部数组推送到chunked
  • 如果你使用chunked.push(element),你只会得到[1, 2, 3, 4, 5, 6, 7],而不是[[1, 2, 3], [4, 5, 6], [7]]
【解决方案2】:

这个 sn-p 所做的只是检查最后一个元素是否存在 chunked 数组长度等于size 然后一个新数组是 使用当前元素创建,否则将当前元素推入 last.

它首先从分块中获取最后一个元素。它将始终是一个数组。当你有最后一个元素时,最初有两个条件

  1. 您将得到未定义:这将在第一次迭代中发生,并且仅在第一次发生。如果是这种情况,那么将在chunked 中推送一个新数组作为chunked.push([element])

  2. 你会得到一个数组。在这里,您还将获得 2 种情况:

  • 您将获得一个长度等于作为参数传递的size 的数组。然后在这种情况下,与案例 1 类似,我们将推送一个新数组,其中包含单个当前元素作为chunked.push([element])

  • 您的数组长度小于或不等于大小然后我们将数组中的元素推送为last.push(element);

【讨论】:

  • 谢谢,但正如我所提到的,我理解逻辑。我不明白用新的element 更新chunked 的机制。它可能是我不理解的特定于 java 脚本的东西
猜你喜欢
  • 2021-02-23
  • 1970-01-01
  • 2021-08-06
  • 2021-04-28
  • 2012-04-14
  • 2022-01-17
  • 2021-09-25
  • 2019-02-03
  • 2014-06-09
相关资源
最近更新 更多