Javascript:无需迭代即可调用数组中每个对象的方法

Javascript:无需迭代即可调用数组中每个对象的方法,javascript,arrays,object,iteration,Javascript,Arrays,Object,Iteration,有没有一种优雅的方法可以不用迭代就对数组中的每个对象调用方法 编辑:这个问题的目的是要问“没有for循环,或者如果可能的话没有任何迭代”对不起 var dogs = [new Dog("Max"), new Dog("Buddy"), new Dog("Charlie")]; for(var i=0; i<dogs.length; i++){ dogs[i].sayName(); } function Dog(name){ this.name = name;

有没有一种优雅的方法可以不用迭代就对数组中的每个对象调用方法

编辑:这个问题的目的是要问“没有for循环,或者如果可能的话没有任何迭代”对不起

var dogs = [new Dog("Max"), new Dog("Buddy"), new Dog("Charlie")];

for(var i=0; i<dogs.length; i++){
    dogs[i].sayName();
}

function Dog(name){

    this.name = name;

    this.sayName = function(){
         console.log(this.name);
    }

}
var dogs=[新狗(“Max”)、新狗(“Buddy”)、新狗(“Charlie”);
对于(var i=0;i使用

或者,您可以使用,它返回一个新数组

dogs.map(function(elem) {
   return elem.name;
}
如果您使用的是array.map(),那么如果您打算使用返回的数组,您应该返回一些内容,这样就不会得到一个包含未定义值的新数组

使用forEach()似乎更适合您的用例

然而,正如@Barmar指出的,这两种方法仍然在数组中的每个元素上迭代

或者,您可以使用,它返回一个新数组

dogs.map(function(elem) {
   return elem.name;
}
如果您使用的是array.map(),那么如果您打算使用返回的数组,您应该返回一些内容,这样就不会得到一个包含未定义值的新数组

使用forEach()似乎更适合您的用例

然而,正如@Barmar所指出的,这两种方法仍然在数组中的每个元素上迭代。

您可以使用。甚至对象初始化也可以用类似的方式完成:

var dogs=['Max'、'Buddy'、'Charly'].map(name=>newdog(name));
dogs.forEach(dog=>dog.sayName());
功能狗(名称){
this.name=名称;
this.sayName=函数(){
console.log(this.name);
}
}
您可以使用。甚至对象初始化也可以用类似的方法完成:

var dogs=['Max'、'Buddy'、'Charly'].map(name=>newdog(name));
dogs.forEach(dog=>dog.sayName());
功能狗(名称){
this.name=名称;
this.sayName=函数(){
console.log(this.name);
}
}
否 对每个数组项执行操作意味着迭代数组

因此,不迭代数组是不可能的。

否 对每个数组项执行操作意味着迭代数组

因此,如果不迭代数组,则无法执行此操作。

您可以使用:

map
的回调包含三个参数:当前值、当前索引和数组。但在您的情况下,您只需要当前值,因此不需要提供其他两个参数。

您可以使用:


map
的回调包含三个参数:当前值、当前索引和数组。但是在您的例子中,您只需要当前值,所以不需要提供其他两个参数。

dogs.forEach(dog=>dog.sayName());
?对于所有回答这个问题的人来说:
forEach()不是吗< /代码>一种迭代的形式?当然,它是一种迭代的形式。意图是要问“递归没有循环”吗?你认为递归是迭代吗?<代码>狗。“没有for循环?"你认为递归是迭代吗?map还从回调函数的返回值创建一个新数组,因为它不需要浪费。FulACH是一个更好的选择,因为它不这样做。我希望选民花一些时间来解释他们的Vo..map也从回调函数的返回值创建一个新的数组。这有点浪费,因为它不需要。forEach是一个更好的选择,因为它不这样做。我希望下层选民能花些时间解释他们的投票。
dogs.map(function(thisDog) { thisDog.sayName(); })