将对象数组克隆到自身中

时间:2018-09-07 11:27:55

标签: javascript jquery arrays clone

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

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

我想将整个数组克隆到自身中。新数组应包含40个元素(每个元素都是现有的“两次”)。像这样:

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

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

4 个答案:

答案 0 :(得分:3)

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

  

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

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

希望这会有所帮助

答案 1 :(得分: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>

  

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

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

答案 2 :(得分:2)

使用ES6传播算子,您可以执行以下操作:

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

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

答案 3 :(得分:0)

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

arr = arr.concat(arr)