将对象数组克隆到自身

Clone array of objects into itself

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

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

我想将整个数组克隆到自身中。新数组应该有 40 个元素(每个元素都是现有的 "twice")。像这样:

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

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

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

The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.

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

希望这对您有所帮助

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

arr = arr.concat(arr)

使用 ES6 扩展运算符,您可以执行以下操作:

const arr = [1, 2, 3]
const doubledArr = [...arr, ...arr]

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

更新答案。

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

我在代码片段的代码注释中引用了您的原始问题,以及您最近对我的旧答案的评论。请仔细阅读。

// "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>

But it seems that the new arrays elements are references to the original and no real clones.

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