【问题标题】:JavaScript Destructive Map FunctionJavaScript 破坏性映射函数
【发布时间】:2019-07-13 15:06:17
【问题描述】:

我试图让这个地图功能成为一个更具破坏性的版本。这意味着 map 函数会修改原始数组而不是新数组。

function map (array, callback) {
  var result = []
  for (var i = 0; i < array.length; i++) {
    result.push(callback(array[i]))
  }
  console.log("Array",array, "Result",result)
  return result
}

console.log 返回:

   Array [ 5, 2, 1 ] Result [ 6, 3, 2 ]

数组应该是 [5,2,1],当前是 [6,3,2]

【问题讨论】:

  • 如果你的目标是就地修改,那么不要返回任何东西。

标签: javascript arrays function methods map-function


【解决方案1】:

您的var result = [] 创建了一个新数组。如果你想修改旧数组,你应该赋值给它(赋值给array参数的属性):

function map (array, callback) {
  array.forEach((item, i) => {
    array[i] = callback(item);
  });
  return array;
}

const arr = [1, 2];
map(arr, e => e + 1);
console.log(arr);

请注意,调用此函数 map 可能有点误导,因为 Array.prototype.map 做了类似的事情,但创建了一个完全独立的数组,就像您的原始代码所做的那样。您可能希望将此函数称为 map 以外的名称,可能是 changeEvery 或类似名称。

【讨论】:

    【解决方案2】:

    您可以按照此代码...希望您的问题得到解决

    function map(array, callback) {
        var result=[]
        for (var i = 0; i < array.length; i++) {
           result.push(callback(array[i]))
        }
        console.log(result)
    }
    map([5, 2, 1], (value) => {
       return value
    })
    

    【讨论】:

    • 感谢您对 OP 的回答;但是,这是一个相当老的问题的答案,您可以编辑您的帖子并解释一下您的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2012-02-20
    • 2011-08-04
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多