Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.push()将多个对象放入JavaScript数组返回';未定义';_Javascript_Arrays - Fatal编程技术网

.push()将多个对象放入JavaScript数组返回';未定义';

.push()将多个对象放入JavaScript数组返回';未定义';,javascript,arrays,Javascript,Arrays,当我向beats数组中添加项,然后向用户添加console.log时,我得到的是数组中正确的项数。但当我检查长度时,我总是得到1。 尝试调用索引总是会给我“未定义”,如下所示: Tom.beats[1] 我想我错过了一些明显的东西,但这让我很难受。我怀疑我误用了.push方法,但我不确定。非常感谢您的帮助! (使用Chrome开发工具) addBeats()应使用beats参数连接this.beats。将多个参数附加到列表中。如果你把它们放在一个数组中,这个“beats”数组就会被追加 很可能不

当我向beats数组中添加项,然后向用户添加console.log时,我得到的是数组中正确的项数。但当我检查长度时,我总是得到1。 尝试调用索引总是会给我“未定义”,如下所示:
Tom.beats[1]
我想我错过了一些明显的东西,但这让我很难受。我怀疑我误用了
.push
方法,但我不确定。非常感谢您的帮助! (使用Chrome开发工具)

addBeats()应使用beats参数连接this.beats。

将多个参数附加到列表中。如果你把它们放在一个数组中,这个“beats”数组就会被追加

很可能不是您要查找的,因为它生成一个新数组,而不是附加到现有数组

您可以使用附加参数列表的项目:

this.addBeats = function(beats) { 
    return [].push.apply(this.beats, beats);
};
扩展运算符 在支持的环境中,您现在可以执行以下操作:

this.addBeats = function (beats) {
    return this.beats.push(...beats);
};
或者如果您需要更多的覆盖控制等

this.addBeats = function(beats) { 
    return this.beats.splice(this.beats.length, null, ...beats);
};

我想知道addBeats函数中的
这个
指针是否混淆了。你能在JS调试器中逐步完成它吗?(IE9有一个)。使用你的方法,它现在可以按照我的预期工作。谢谢因此,我的返回行完全不正确…
[]。每次调用函数时,push
将创建一个新数组。我想使用
返回此.beats.push.apply(this.beats,beats)
更便宜。@AlexanderKachkaev,实际上,否:。使用
[].someFunction.call
{}.someFunction.apply
等是一种至少Firefox和Chrome能够理解和优化的模式。使用
[].push
,而不是
变量。push
数组。prototype.push
稍微快一点,因为它不需要查找变量名。@Kay如果jsperf也给出了内存消耗的概要,那就太好了。延迟到以后的垃圾收集可能会抵消额外的性能收益百分比?(这种优化也许可以解释为什么如果我把标签打开几天,Gmail会比我的Java IDE占用更多的内存?!)注意:一年后,我的说法不再正确了<在FirefoxV44和ChromeV46中,code>Array.prototype.push.apply的速度提高了10%左右。
this.addBeats = function(beats) { 
    return this.beats.splice(this.beats.length, null, ...beats);
};