【问题标题】:Clone array of objects into itself将对象数组克隆到自身中
【发布时间】:2019-02-12 18:04:25
【问题描述】:

这是我的源数组(例如,有 20 个元素):

var myArray= $('.my-selector').clone().toArray();

我想将整个数组克隆到自身中。新数组应该有 40 个元素(每个元素存在“两次”)。像这样:

myNewArray = myArray.concat($('.my-selector').clone().toArray())

但似乎新的数组元素是对原始数组的引用,没有真正的克隆。

【问题讨论】:

  • 这听起来像是一个 XY 问题。你这样做有什么收获?
  • 你能给我们举个例子吗?或者你想要达到的结果?
  • 你的问题是unclear
  • 你说的是 JS 数组,还是 HTMLTableElement 的行/单元格?
  • Whished 结果:一个 jQuery 选择被选中,它的元素应该被复制到另一个 DOM 部分。但是元素应该多次复制到新的地方。

标签: javascript jquery arrays clone


【解决方案1】:

更新答案。

@JKB,我根据您最近对我的旧答案的评论更新了我的答案。我认为您在问题中发布的代码实际上运行良好。我使用 3 个元素来演示这个,而不是原来的 20 个,但同样的逻辑也适用。

我在代码 sn-ps 中的代码 cmets 中引用了您的原始问题,以及您最近对我的旧答案的评论。请仔细阅读。

// "The source are jQuery objects" ~ JKB
var source = $('.my-selector')

/* "This source should be cloned into an array" - JKB
I am Copying this from your original code. */
var myArray = $('.my-selector').clone().toArray()

/* "Now i want to increase the arrays size by copying its content into itself, after that the array should contain 20 objects (each object twice)" - JKB
Our array should contain 6, since we're cloning 3 elements onto itself. Copying this again from your original code. */
var myNewArray = myArray.concat($('.my-selector').clone().toArray())

// "BUT: Now this objects should be inserted back into another DOM place (not into their original place)." - JKB
$('#anotherPlace').append(myNewArray)
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>

<div class="my-selector">first</div>
<div class="my-selector">second</div>
<div class="my-selector">third</div>
<div id="anotherPlace" style="background:red"></div>

但似乎新的数组元素是对 原创,没有真正的克隆。

它们不是,这就是为什么我们在红色背景 div 中看到每个副本有 2 个副本 - 第一个、第二个和第三个。这是你要找的东西,还是我错过了一些明显的东西?

【讨论】:

  • 来源是 jQuery 对象。这个源应该被克隆到一个数组中(这个工作,第一行代码)。假设这个数组此时包含 10 个对象。现在我想通过将其内容复制到自身来增加数组的大小,之后数组应该包含 20 个对象(每个对象两次)。但是:现在这个对象应该被插入到另一个 DOM 位置(而不是它们原来的位置)。
  • @JKB 我已经根据您的评论更新了我的答案,请看一下。
【解决方案2】:

您可以在 mdn 的 javascript 上使用 concat 方法。

concat() 方法用于合并两个或多个数组。这种方法 不会改变现有数组,而是返回一个新数组。

var arr = ["test1", "test2", "test3"]; arr = arr.concat(arr);

希望对你有帮助

【讨论】:

    【解决方案3】:

    使用 ES6 扩展运算符,您可以:

    const arr = [1, 2, 3]
    const doubledArr = [...arr, ...arr]
    
    console.log(doubledArr) // [1, 2, 3, 1, 2, 3]

    【讨论】:

      【解决方案4】:

      我假设您希望按顺序克隆对象,因此您可以使用以下方法将数组与自身的克隆连接起来:

      arr = arr.concat(arr)

      【讨论】:

        猜你喜欢
        • 2015-06-27
        • 1970-01-01
        • 2011-01-20
        • 2021-01-07
        • 1970-01-01
        • 2013-09-10
        • 2018-04-29
        • 1970-01-01
        • 2018-05-26
        相关资源
        最近更新 更多