这是我的源数组(例如,包含20个元素):
var myArray= $('.my-selector').clone().toArray();
我想将整个数组克隆到自身中。新数组应包含40个元素(每个元素都是现有的“两次”)。像这样:
myNewArray = myArray.concat($('.my-selector').clone().toArray())
但是新数组元素似乎是对原始数组的引用,而没有真正的克隆。
答案 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)