将对象数组克隆到自身
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。这是您要找的东西,还是我遗漏了一些明显的东西?
这是我的源数组(例如有 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。这是您要找的东西,还是我遗漏了一些明显的东西?