在这种情况下,array.push和array.splice之间的区别

时间:2014-09-14 15:01:50

标签: javascript

我正在使用一个开源项目我不想改变这条线......

this.model[this.config.childrenPropertyName].push(child.model);

this.model[this.config.childrenPropertyName].splice(this.model.length, 0, child.model);

但它打破了对象模型的排序(这是一个树实现)。但是当我在测试工具中测试这两种方法时,它们似乎保留了顺序。我认为如上所述,他们会做同样的事情......

注意:这对我来说只是一个愚蠢的编码错误,两者之间没有区别,正如下面正确回答

2 个答案:

答案 0 :(得分:0)

在第二个示例中,您将在原始数组的索引处插入与第二个长度相对应的项目。

例如:如果原件长度为5而第二个为2,则它将变为[old,old,new,new,old,old,old]

您需要以原始数组的长度插入,或者保证更高的数字。

请参阅Array.prototype.splice() on MDN

那就是说,第一种方式是如此清洁。为什么不使用它?

答案 1 :(得分:0)

第一行插入child.model作为this.model[this.config.childrenPropertyName]数组的最后一个元素。

第二行在child.model数组中的某个位置插入this.model[this.config.childrenPropertyName]

这些行只有在this.model[this.config.childrenPropertyName].length等于this.model.length时才相同,但第一行更清晰。