连接Raphaël集

时间:2013-07-27 01:30:19

标签: javascript arrays svg raphael concatenation

使用Raphaël library,您可以创建集合,这些集合是类似于数组的对象,可以保存Raphaël元素,并且可以在调用元素方法时隐式循环这些元素。问题是尽管这些集合是,但并不是Array原型中的所有函数都可用于Raphaël集,包括Array.concat()。如何连接两个Raphaël套件并换成一个新套件?我不想修改任何一个原始集。

1 个答案:

答案 0 :(得分:1)

好的,我想出了办法。秘密是Raphaël集合有一个名为items的未记录的属性,这是该集合所持有的Raphaël元素的正常数组。

Raphaël集合确实具有与Array.splice()方法类似的东西,用于从数组中删除和插入元素。 Array.splice()的语法是anArray.splice(startingIndex, numberOfItemsToRemove, itemToInsert[, anotherItemToInsert...])。该函数创建一个空集,它们只是splice将两个现有集合中的项目放入新集合中。在这种情况下,startingIndexnumberOfItemsToRemove都应为0,因为新集的length0,这意味着唯一的索引是{{} 1}}并且您不可能删除超过0个元素。

以下函数在0上使用JavaScript的function.apply()方法(如splice()中所述)。 splice.apply()有两个参数:一个赋值给函数内部apply()关键字的值和一个成为函数参数的数组。我们可以创建一个数组作为this的参数传递给apply()。此数组中的前两项是splice()startingIndex,因此它们都将设置为numberOfItemsToRemove。所有后续参数都是要插入新集合的项目。我们可以使用0初始化此数组,这是一个真正的数组, 具有[0, 0]方法。我们现在要做的就是concat()每个集合的元素,我们可以从集合的concat()属性到item的末尾,创建一个参数数组,被传递给新的空集的[0, 0]方法。

splice()

下面的函数可以根据需要连接多个集合;只需传入一组数组作为第二个参数,将纸质对象作为第一个传递。如果function concatSets(paper, setA, setB){ var newSet = paper.set(); // Creates a new, empty set newSet.splice.apply(newSet, [0, 0].concat(setA.items, setB.items)); return newSet; } ,则该函数只创建该集的副本。

arrayOfSets.length == 1