【问题标题】:Push Array in same array results in circular reference在同一数组中推送数组会导致循环引用
【发布时间】:2018-10-27 10:40:21
【问题描述】:

我正在尝试在数组中推送相同的数组。为什么要创建循环引用?

var arr =[4,4];
arr.push(arr);
console.log(arr)
// Expected output = [4,4,[4,4]]
// actual output = [4,4,[4,4,[4,4,[...]]]

【问题讨论】:

  • 因为...您将 实际上是同一个数组推入了它自己的内部。
  • 数组作为指针被推送。然后打印遍历所有元素并遵循所有指针。这永远不会终止。
  • 请同时添加想要的结果。你想保留对arr的引用吗?
  • 我只是想知道这种情况下循环引用背后的原因。 @NinaScholz
  • @komalbansal 看看我的答案。

标签: javascript arrays circular-reference


【解决方案1】:

因为第一个元素是数组,所以元素的第一个元素是对外部数组的引用,以此类推。

你正在寻找Array#slice:

const arr1 = [4, 4]
arr1.push (arr1.slice (0)) // <-- slice creates a new array
                         //     whose members are the same as
                         //     arr1

console.log (arr1)

扩展语法也可以帮助解决这个问题:

const arr1 = [4, 4]
arr1.push ([...arr1]) // spread syntax
console.log (arr1)

【讨论】:

    【解决方案2】:

    您正在推送相同的数组。一种选择是,您可以使用spread syntax 来迭代每个数组元素并构造一个新元素。

    喜欢:

    var arr = [4, 4];
    arr.push([...arr]);
    console.log(arr)

    文档:spread syntax

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2016-06-10
      • 2019-10-19
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多