Javascript 此场景中array.push和array.splice之间的差异

Javascript 此场景中array.push和array.splice之间的差异,javascript,Javascript,我正在与一个开源项目合作,我不想改变路线 this.model[this.config.childrenPropertyName].push(child.model); 到 但是它打破了对象模型的顺序(这是一个树实现)。但当我在测试工具中测试这两种方法时,它们似乎保持了顺序。我认为实现如上所述,他们会做完全相同的事情 注意:就我而言,这只是一个愚蠢的编码错误,两者之间没有区别,正如下面正确回答的那样在第二个示例中,您将在与第二个数组长度对应的原始数组的索引处插入项 例如:如果原始长度为5,第二

我正在与一个开源项目合作,我不想改变路线

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

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


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

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

例如:如果原始长度为5,第二个长度为2,则它将成为
[旧、旧、新、新、旧、旧、旧]

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


也就是说,第一种方法更干净。为什么不使用它?

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

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


只有当
this.model[this.config.childrenPropertyName].length
等于
this.model.length
时,这些行才是相同的,但第一行要干净得多。

抱歉,我在问题中犯了一个错误,请检查,因为它们现在是相同的。我同意<代码>数组。推送非常干净。更改为
splice
似乎适得其反。我正在尝试使用splice,以便稍后可以开始发送参数。我正在重构。谢谢你,伙计,是的,我只是看不到问题,第二双眼睛总是好的:-)你的最后一句话“只有当
this.model[this.config.childrenPropertyName]
等于
child.model
…”是错误的。我想你的意思是“只有当
this.model[this.config.childrenPropertyName].length
等于
this.model.length
时,这些行才是相同的。”如果可以,我会相应地编辑你的回答。我想你在第二行的目的实际上是
this.model[this.config.childrenPropertyName].splice(this.model[this.config.childrenPropertyName].length,0,child.model);
,然后两者将是等效的。否则,您将在
this.model[this.config.childrenPropertyName]
中的某个随机点插入,这取决于其父级的长度,而父级的长度与语句中的任何其他内容无关。
this.model[this.config.childrenPropertyName].splice(this.model.length, 0, child.model);