【问题标题】:convert the following code from a for-loop to Array#map将以下代码从 for 循环转换为 Array#map
【发布时间】:2014-09-24 20:57:09
【问题描述】:

我正在研究简单的 js 函数... 我正在尝试将以下代码从 for 循环转换为 Array#map 在小提琴下面提供我的代码.. bnasically我正在尝试学习数组映射..

http://jsfiddle.net/newtdms2/

function doubleAll(numbers) {
    var result = [];
    result = numbers.map(function(num) {
        for (var i = 0; i < numbers.length; i++) {
            result.push(numbers[i] * 2)
        }
        return result;
    });
}

module.exports = doubleAll

【问题讨论】:

  • module.exports = (nums) =&gt; nums.map(x =&gt; 2*x) - 这是带有新节点(带箭头)和map的整个代码

标签: javascript jquery html angularjs backbone.js


【解决方案1】:

您不必在map 中创建for 循环,map 将在您作为参数传递的数组的每个元素上调用函数回调。所以试试类似的东西:

function doubleAll(numbers) {
  return numbers.map(function (num) {
    return num * 2;
  });
}

Here 是 map 方法的文档,你可能会感兴趣!

【讨论】:

  • 和我第一次给出的答案一样
  • 你匆匆忙忙。是的,我们的代码几乎相同,但我花了更多时间解释至少我做了什么,因为那是 OP 想要的。在@BenjaminGruenbaum 的帮助下,我刚刚更改了答案。
【解决方案2】:

您的 for inside map 不是必需的:

function doubleAll(numbers) {
    var result = [];
    result = numbers.map(function(num) {
        return (num * 2);
    });
   return result;
}

更简单的可以是:

function doubleAll(numbers) {    
   return numbers.map(function(num) {
      return (num * 2);
   });
}

Array.prototype.map: 将遍历数组中的每个元素。它接收一个回调函数作为参数,回调函数接受三个参数,即前两个:

  • currentItem:上例num的数组中正在处理的元素。
  • index:数组中正在处理的元素的索引,在for循环中这将是i

【讨论】:

  • 为什么是result?您无缘无故地在这里分配一个数组
  • result 保留在第一个示例中,以避免与示例帖子的重大差异并突出显示丢失的返回,但后来解释了如何简化它。但这一切都是为了简单起见一个更明确的答案
  • 现在我们的答案是一样的 :)
【解决方案3】:
function doubleAll(numbers) {
  return numbers.map(num => num*2);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 2021-10-22
    • 2017-12-31
    • 2014-03-30
    • 2021-05-29
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多