【问题标题】:make an array become a function that adds a give value to numbers in the array使数组成为一个函数,为数组中的数字添加一个给定值
【发布时间】:2017-09-23 16:43:06
【问题描述】:

所以我遇到了编写一个函数的问题,该函数将采用给定数组,向其中添加给定数字并输出一个新数组,将给定数字添加到数组中的每个元素.. 所以 given_array = [1, 2 , 3, 4, 5] ... function add(5) .... new_array (或者更改旧数组)= [6, 7, 8, 9, 10] .

问题来了:

// write code so that console logs print out true
//   add(addValue) should return a new arrays where addValue
//   is added to each value of original array
//   i.e. [6, 7, 8, 9, 10] > 

var e = [1, 2, 3, 4, 5];
console.log(e.add(5) == '[6,7,8,9,10]');

这给了我我的结果,但这不是问题

var e = [1, 2, 3, 4, 5];
var addValue = (e, Val) => e.map(add=>add+Val);

console.log(addValue(e,5));

【问题讨论】:

  • 修改Array.prototype对象。
  • 在这种情况下我该怎么做?你的意思是在我创建的答案中?在原型方面我是个新手。
  • Array.prototype.add = function add (n) { return this.map(v => v + n).join() }
  • 你不需要添加到原型中。你只需要写一个函数。你让事情变得更加困难。
  • 问题也是toString,它返回值,用逗号连接,不带括号。

标签: javascript arrays function ecmascript-6 numbers


【解决方案1】:

编写一个函数,该函数接受您要与之相加的整数,并返回一个新函数,当您向其传递一个数组时,该函数将执行加法计算:

function add(n) {
  return function (arr) {
    return arr.map(function (el) {
      return n + el;
    });
  }
}

const add5 = add(5);
add5([1, 2, 3, 4, 5]); // [6, 7, 8, 9, 10]

DEMO

您甚至不需要创建一个新变量来保存返回的函数:

add(5)([1, 2, 3, 4, 5]);

在 ES6 单行中:

const add = (n) => (arr) => arr.map(el => n + el);

DEMO

如果你真的想把它添加到Array.prototype(确保你检查你提出的新方法不在原型上):

if (!(Array.prototype.add)) {
  Array.prototype.add = function (n) {
    return this.map(function (el) {
      return n + el;
     });
  }
}

[1, 2, 3, 4, 5].add(5); // [6, 7, 8, 9, 10]

DEMO

【讨论】:

    【解决方案2】:

    最直接的方法是使用Array#add() 中的作用域函数调用Array#map(),使用传入的number 参数:

    Array.prototype.add = function add (number) {
      return JSON.stringify(this.map(value => value + number))
    }
    
    var e = [1, 2, 3, 4, 5]
    
    console.log(e.add(5) == '[6,7,8,9,10]')

    您必须用JSON.stringify() 换行的原因是Array#toString()Array#join() 不像JSON 编码那样包含换行方括号。

    【讨论】:

      【解决方案3】:

      使用原型

      Array.prototype.add = function(val) {
          for(var i=0;i<this.length;i++){
               this[i] = this[i]+val;
          }
      };
      e.add(6);
      console.log(e);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-24
        • 1970-01-01
        • 2019-07-17
        • 1970-01-01
        • 2013-11-03
        相关资源
        最近更新 更多