【问题标题】:Mutate JavaScript Array Inside Function在函数内部改变 JavaScript 数组
【发布时间】:2014-08-20 15:23:13
【问题描述】:

在 JavaScript 中,我如何在函数内部改变数组的值?我知道在使用某些数组方法时会发生这种情况,但它似乎不适用于正常分配。

var arr = [4]

function changeArray(arr) {
arr = [1,2,3];
}

// arr is still equal to [4]. I want it to equal [1,2,3].

据我了解,此代码不会在函数之外更改“arr”的值。我怎样才能以改变作为参数传递的数组的方式来做到这一点?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你可以使用.splice:

    arr.splice(0, arr.length, 1, 2, 3);
    

    或者您可以清空数组并.push 值:

    arr.length = 0;
    arr.push(1, 2, 3);
    // or given an array of values
    arr.push.apply(arr, newValues);
    

    但是,请确保函数清楚地更改了数组就地。虽然有执行此操作的本机函数(例如 Array#sort),但我认为这并不像简单地返回一个新数组那样常见。


    据我了解,这段代码不会改变函数外“arr”的值。

    正确。为变量或属性分配新值从不更改另一个变量或属性的值(例外:全局范围和with 语句)。 您基本上是尝试更改变量的值,而不是改变值本身。

    JavaScript 是调用/传递/分配by value(维基百科也提到了"by sharing"),而不是by reference

    【讨论】:

    • concat 方法不会改变原始数组。因此,如果你想通过在函数中添加另一个数组来改变一个数组,你需要使用循环和push/splice的组合吗?
    • 如果你只是想从一个数组中添加多个元素,你可以使用.push + .apply:arr.push.apply(arr, newElements);
    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多