首页 > 解决方案 > 如何克服 Js 中的数组突变

问题描述

试图克服 js 函数中列表的突变。几个小时以来,我一直在尝试使用诸如list.slice()复制要使用的数组之类的技术。以及其他方法。我已将我的功能归结为此处显示的更基本版本:

list = [[1,2],[3,4],[5,6]]

function listadjust(b) {
    for (i = 0; i < b.length; i++) {
        if (i == (b.length-1)) {
            b[i][1] = 1;
        }
    }
    return b;
}

它的意思是采用多维数组输入并更改最后一个元素的第二个元素。(上面显示的变量list中的 6。任何克服这个问题的方法都会很棒。我不是程序员,只需要一个非常简单的工具,并且对它为什么不起作用感到失望。谢谢!

标签: javascriptmutation

解决方案


与原始类型(即数字或字符串)不同,数组是引用类型。这意味着当您将数组分配给变量时,您分配的是内存地址而不是实际的数组本身,因此您只需在对数组进行任何修改之前进行深度克隆

list = [[1,2],[3,4],[5,6]]

const clone = (items) => items.map(item => Array.isArray(item) ? clone(item) : item);

function listadjust(b) {
    const arr = clone(b)
    for (i = 0; i < arr.length; i++) {
        if (i == (arr.length-1)) {
            arr[i][1] = 1;
        }
    }
    return arr;
}

推荐阅读