【问题标题】:Can I modify array passed as an argument?我可以修改作为参数传递的数组吗?
【发布时间】:2017-07-04 22:14:44
【问题描述】:

和标题一样,我可以修改作为参数传递的数组吗? (不使用return

function arrayElementsRemove(array, element) {
    array.filter(item => item != element);
}

然后

it('should remove items from array', () => {
    var array = [1,2,2,3];
    arrayElementsRemove(array, 3);
    expect(array).to.equal([1,2,2]); // fails, array still equals [1,2,2,3]
});

【问题讨论】:

  • 是的,你绝对可以。通过在浏览器开发者控制台或 Node.js 中进行快速测试,您可能已经发现了这一点。

标签: javascript


【解决方案1】:

数组作为引用传递。您的问题是 Array.filter 不会更改原始数组,而是返回一个新数组。

您应该执行从length-10 的循环,而不是Array.filter,当element === array[i] 使用Array.splice 删除该项目。

您的arrayElementsRemove 函数应如下所示:

var arr = [1, 2, 3, 2, 3];

function arrayElementsRemove(array, element) {
    for (var i = array.length-1; i >= 0; i--) {
        if (array[i] === element) {
            array.splice(i, 1);
        }
    }
}

arrayElementsRemove(arr, 3);

console.log(arr);

【讨论】:

  • 我嫉妒你离 2000 代表有多近,真的想要我一些编辑权限:P
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 2018-10-11
  • 2011-10-31
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多