var Product = {
name : 'Soap',
brand : 'Dove',
price : 25.50,
discountRate : 5,
quantitySold: [10,5,25,8,4],
netPrice:function(){return this.price * (100 - this.discountRate) / 100;},
averageSales:function(){
for(var sum in this.quantitySold){
var i = 0;
i++
sum += this.quantitySold[i];
}
return sum
}
}
代码应该添加数组中的值(quantitySold)然后平均它们,但我似乎无法显示for循环,当你运行代码时它只显示为文本
答案 0 :(得分:2)
您需要在数组中添加所有数字,然后将它们除以数组的长度。 Array#reduce
是循环和求和数据的好方法:
var Product = {
name: 'Soap',
brand: 'Dove',
price: 25.50,
discountRate: 5,
quantitySold: [10, 5, 25, 8, 4],
netPrice: function() {
return this.price * (100 - this.discountRate) / 100;
},
averageSales: function() {
return this.quantitySold.length && this.quantitySold.reduce(function(sum, num) {
return sum + num;
}) / this.quantitySold.length;
}
}
console.log(Product.averageSales());

如果您希望使用简单的循环,请使用简单的for loop:
var Product = {
name: 'Soap',
brand: 'Dove',
price: 25.50,
discountRate: 5,
quantitySold: [10, 5, 25, 8, 4],
netPrice: function() {
return this.price * (100 - this.discountRate) / 100;
},
averageSales: function() {
var sum = 0;
for (var i = 0; i < this.quantitySold.length; i++) {
sum += this.quantitySold[i];
}
return sum / this.quantitySold.length;
}
}
console.log(Product.averageSales());
&#13;
为什么代码的结果是&#34; 45&#34;?
当您使用for in
时,sum
变量包含属性键字符串(索引),并且在收到新索引时会丢弃所有内容。此外,在每个循环上,您将i
重置为0,并将其递增1,因此i
有效地始终为1.当它到达最后一次迭代时sum
为"4"
,索引1
中的数字是5 =&gt; "4" + 5 === "45"
,这就是你得到的结果。
答案 1 :(得分:0)
试试这个:
var Product = {
name : 'Soap',
brand : 'Dove',
price : 25.50,
discountRate : 5,
quantitySold: [10,5,25,8,4],
netPrice:function(){return this.price * (100 - this.discountRate) / 100;},
averageSales:function(){
var sum = 0;
for(var i in this.quantitySold){
sum += this.quantitySold[i];
}
return (sum / this.quantitySold.length);
}
}
答案 2 :(得分:0)
您不应将for..in
循环与应该用于object
的数组一起使用。您可以使用常规for
循环,如下所示。
var Product = {
name : 'Soap',
brand : 'Dove',
price : 25.50,
discountRate : 5,
quantitySold: [10,5,25,8,4],
netPrice: function(){ return this.price * (100 - this.discountRate) / 100; },
averageSales: function(){
var sum = 0;
for(var i = 0; i < this.quantitySold.length; i++){
sum += this.quantitySold[i];
}
return sum / this.quantitySold.length;
}
};
console.log(Product.averageSales());
&#13;
答案 3 :(得分:0)
我认为... in将sum
值设置为this.quantitySold
属性名称,但是执行所需循环的等效方法是声明for ... of(for for。 ..每个在ES4中)迭代集合。当然,您应该在一个地方声明sum
初始化0
,其价值不会受到影响。由于我们将要使用...因为语法,我们只能在其parens之外声明sum
。如果我们可以在里面声明它是常见的:for (var ..., sum = 0;;)
sum = 0;
for (let quantity of this.quantitySold)
sum += quantity;
var sum;
return sum;
答案 4 :(得分:0)
var Product = {
name : 'Soap',
brand : 'Dove',
price : 25.50,
discountRate : 5,
quantitySold: [10, 5, 25, 8, 4],
netPrice: function(){
return this.price * (100 - this.discountRate) / 100;
},
findAverage: function() {
// create a var for the quantitySold Array
var quantity = Product.quantitySold;
// find the sum of each item in the Array using reduce
var sum = quantity.reduce(function(a, b) {
return (a + b);
});
// take the average of the sum divided by the number of items in the Array
return avg = sum / quantity.length;
}
}
// Run the function to return the avg
Product.findAverage();
创建一个将对象作为第一个参数的函数和一个运行此findAverage代码作为第二个参数的函数也会更好。这样你就可以在任何对象上运行它,以便它可以重复使用。