2015-05-05 33 views
1

我正在学习JavaScript,现在我遇到了一些数组函数的问题,特别是forEach方法。JS - Array for each方法clarifyiton

'use strict'; 

var business = [ 
    { 
    name: 'Red Apple', 
    distance: 2, 
    price: 3, 
    rating: 1 
    }, 
    { 
    name: 'Zoe', 
    distance: 1, 
    price: 1, 
    rating: 5 
    }, 
    { 
    name: 'Everything Pizza', 
    distance: 6, 
    price: 1, 
    rating: 2 
    }, 
    { 
    name: 'Salad Place', 
    distance: 2, 
    price: 2, 
    rating: 4 
    }, 
    { 
    name: 'Yumm', 
    distance: 5, 
    price: 2, 
    rating: 3 
    }, 
    { 
    name: 'California Foods', 
    distance: 8, 
    price: 5, 
    rating: 4 
    } 
]; 





business.updateLocation = function (miles) { 
    function updateDistance(value){ 
     value.distance += miles; 
    } 
    return this.forEach(updateDistance); 
}; 

代码的顶部是我创建的简单业务审查前端的对象数组。我在其他函数中调用了其他数组方法,并且很好地执行了它们的表,这些是过滤器和排序方法。我的目标是简单的变量英里添加到物体的距离属性,然后以表格的形式打印出来,使用此代码:

// Test the updateLocation method. 
console.log('Return value from updateLocation') 
console.table(business.updateLocation(3)); 

每当我打电话console.table(business.updateLocation(3) ),没有打印。我确定它与我的功能有关,因为我仍然对每个需要的三个参数感到困惑。有人可以详细说明在这种情况下使用的价值,索引和数组吗?我只需要价值......对吗?提前致谢!

回答

3

Array.forEach总是返回undefined。

forEach()对每个数组元素执行一次回调函数;不像every()和some(),它总是返回未定义的值。

'use strict'; 
 

 
var business = [ 
 
    { 
 
    name: 'Red Apple', 
 
    distance: 2, 
 
    price: 3, 
 
    rating: 1 
 
    }, 
 
    { 
 
    name: 'Zoe', 
 
    distance: 1, 
 
    price: 1, 
 
    rating: 5 
 
    }, 
 
    { 
 
    name: 'Everything Pizza', 
 
    distance: 6, 
 
    price: 1, 
 
    rating: 2 
 
    }, 
 
    { 
 
    name: 'Salad Place', 
 
    distance: 2, 
 
    price: 2, 
 
    rating: 4 
 
    }, 
 
    { 
 
    name: 'Yumm', 
 
    distance: 5, 
 
    price: 2, 
 
    rating: 3 
 
    }, 
 
    { 
 
    name: 'California Foods', 
 
    distance: 8, 
 
    price: 5, 
 
    rating: 4 
 
    } 
 
]; 
 

 

 
business.updateLocation = function (miles) { 
 
    function updateDistance(value){ 
 
     value.distance += miles; 
 
    } 
 
    this.forEach(updateDistance); 
 
    return this; 
 
}; 
 

 
console.log(business.updateLocation(3));

+1

从技术上讲,它确实会返回一些内容:* forEach()对每个数组元素执行一次回调函数;不像'every()'和'some()',它总是返回值undefined。*这是问题。 :) –

+0

你是对的,谢谢更新我的答案。 – DTing

-1

在Java脚本每个循环使用以下语法(迭代器名称,数据源)

所以你的情况,通过在企业的每个项目进行迭代,你将使用代码

for each (var item in business) 

让利我知道这是否解决了你的问题:)

+0

这是不正确的形式 – Downgoat

1

Array.foreach()函数仅工作在一个给定的阵列实例的每个元件上,而不是返回一个新的数组实例。这是的documentation。正如你在文档中看到的那样,该函数需要在数组中的每个元素上运行回调函数,并且可选对象将设置为回调函数内可用的this对象。所以,你会使用Array.foreach()函数像这样写你的代码行:

this.forEach(updateDistance); 

顺便说一句,在Array.map()功能做了你最初找你的问题做。这是Array.map()函数的documentation。正如你在文档中看到的那样,这个函数采用与Array.forEach()函数相同的参数,并且还在数组中的每个元素上运行回调函数,但回调函数需要返回一些东西,每个返回对象都被插入到一个新的从函数返回的数组实例。