【问题标题】:Passing an array to a function that has a loop in Javascript将数组传递给在 Javascript 中具有循环的函数
【发布时间】:2014-10-28 17:37:57
【问题描述】:

我需要一个基本上只是将数组成员乘以 100 的函数。数组成员的数量可能会改变。另外,我不能使用像 array.prototype.map 这样的东西——它必须是一个循环。

这是我到目前为止所得到的,但 newArray 返回为未定义...我做错了什么?

var a = [1, 2, 3];

function toPts(array){
    for(var i=0; i<array.length; i++){
        array[i] *= 100;
    }
}

var newArray = toPts(a);

需要的最终结果是 newArray = [100, 200, 300]

【问题讨论】:

  • 你需要返回数组,现在你只需修改现有的。

标签: javascript arrays function loops


【解决方案1】:

您忘记返回数组。如果你只是想修改现有的,你只需要这样做:

toPts(a);
console.log(a) // [100,200,300]

如果你想要一个原始未改动的新数组:

function toPts(array){
    var arr = array.slice(0); // copy array to new reference
    for(var i=0; i<arr.length; i++){
        arr[i] *= 100;
    }
    return arr;
}
var newArray = toPts(a);
console.log(newArray) // [100,200,300]
console.log(a) // [1,2,3]

【讨论】:

  • 是否应该缓存 array.length 值,以防这是一个巨大的数组?
  • 没有必要,因为.length 是一个属性,而不是在调用时计算出来的东西,所以它与存储在变量中相同。只有 IE 似乎从捕获数组长度中受益
  • 老太太的故事……你说得对。 jsperf.com/for-vs-foreach/234 看起来确实像做 i-- 而不是 i++ 等会节省一点。
【解决方案2】:
function toPts(array){
    for(var i=0; i<array.length; i++){
        array[i] *= 100;
    }
    return array;
}

你没有return数组到外面。

但是,请注意您正在修改原始数组,因此将它放在两个变量中没有多大意义。

可能你想复制它:

function toPts(array){
    var newArray = array.slice();
    for(var i=0; i<newArray.length; i++){
        newArray[i] *= 100;
    }
    return newArray;
}
var a = [1, 2, 3],
    newArray = toPts(a); // `a` is not altered

【讨论】:

    【解决方案3】:

    a 被原地相乘,因为它通过引用传递,所以在函数之后(returns 什么都没有)

    toPts(a);
    alert(a) // 100,200,300
    

    【讨论】:

    【解决方案4】:

    你没有从函数中返回任何东西, 您只需要在函数内返回修改后的数组(循环执行完毕后)

    喜欢

      var a = [1, 2, 3];
    
      function toPts(array){
       for(var i=0; i<array.length; i++){
        array[i] *= 100;
       }
    return array;
     }
     var newArray = toPts(a);
    

    【讨论】:

      【解决方案5】:

      默认情况下,函数在不返回任何内容时返回 undefined。您的 a 数组已更改为结果数组。

      var a = [1, 2, 3];
      
      function toPts(array){
          for(var i=0; i<array.length; i++){
              array[i] *= 100;
          }
      }
      
      console.log(a);//this give you resulted output becuse array is passing as call by reference. so changes made in the same array
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-26
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2015-04-03
        • 2017-05-29
        相关资源
        最近更新 更多