JS - Array forEach方法clarificaiton

时间:2015-05-05 02:27:32

标签: javascript arrays foreach

我正在学习JavaScript,我遇到了一些数组函数的问题,特别是forEach方法。

'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);
};

代码的顶部是我正在创建的简单业务审核前端的对象数组。我在其他函数中调用了其他数组方法并执行了它们的表,这些是过滤器和排序方法。我的目标是简单地将变量里程添加到对象的distance属性,然后使用以下代码以表格形式打印它们:

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

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

3 个答案:

答案 0 :(得分:3)

Array.forEach始终返回undefined。

  

forEach()为每个数组元素执行一次回调函数;与every()和some()不同,它总是返回undefined值。

'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 :(得分:1)

Array.foreach()函数仅对给定数组实例中的每个元素进行操作,而不是返回新的数组实例。这是Array.forEach()的{​​{3}}。正如您在文档中看到的那样,该函数将在数组中的每个元素上运行一个回调函数,并将一个可选对象设置为回调函数中可用的this对象。因此,您可以使用Array.foreach()函数编写代码行,如下所示:

this.forEach(updateDistance);

顺便说一下,Array.map()函数是你最初想要在你的问题中做的。这是Array.map()函数的documentation。正如您在文档中看到的,此函数采用与Array.forEach()函数相同的参数,并且还对数组中的每个元素运行回调函数,但回调函数需要返回一些内容,每个返回对象都是插入从函数返回的新数组实例。

答案 2 :(得分:-1)

对于java脚本中的每个循环,使用以下语法(迭代器名称,数据源)

因此,在您的情况下,要遍历业务中的每个项目,您将使用代码

for each (var item in business) 

请告诉我这是否解决了您的问题:)