19

当我将项目添加到 beats 数组然后 console.log 用户时,我得到了数组中正确数量的项目。但是当我检查 .length 时,我总是得到 1。尝试调用索引总是会给我这样的“未定义”: Tom.beats[1] 我认为我遗漏了一些明显的东西,但这让我感到沮丧。我怀疑我在滥用该.push方法,但我不确定。任何帮助是极大的赞赏!(使用 Chrome 开发工具)

//The USER

function User(name, role){
    this.beats = [ ]; 

    this.name = name;
    this.role = role;

    // add beats to beats array

    this.addBeats = function(beats){ 
        return this.beats.push(beats);
   };

}

// Three New Instances. Three New Users.

var Mal = new User("Mal", "Rapper");
Mal.addBeats(["love", "cash"]);

var Dan = new User("Dan", "Producer");
Dan.addBeats(["cake", "dirt", "sally-mae"]);

var Tom = new User("Tom", "Producer");
Tom.addBeats(["Fun", "Little", "Samsung", "Turtle", "PC"]);

// Check for position in beats array

console.log(Tom.beats); 
console.log(Mal.beats); 
console.log(Dan.beats); 

console.log(Mal.beats[1]);
console.log(Dan.beats[1]);
console.log(Tom.beats[1]);
4

3 回答 3

52

Array.push(...)需要多个参数附加到列表中。如果你把它们放在一个数组中,这个“节拍”数组将被附加。

Array.concat(...)很可能不是您要查找的内容,因为它会生成一个新数组而不是附加到现有数组。

您可以使用[].push.apply(Array, arg_list)附加参数列表的项目:

this.addBeats = function(beats) { 
    return [].push.apply(this.beats, beats);
};
于 2012-06-17T23:48:24.043 回答
11

扩展运算符

在支持扩展运算符的环境中,您现在可以执行以下操作:

this.addBeats = function (beats) {
    return this.beats.push(...beats);
};

或者,如果您需要更多控制来覆盖等

this.addBeats = function(beats) { 
    return this.beats.splice(this.beats.length, null, ...beats);
};
于 2016-05-19T10:28:22.893 回答
1

addBeats() 应该将 this.beats 与 beats 参数连接起来。

于 2012-06-17T23:41:36.380 回答