javascript - 如何将嵌套数组的值更改为所有相同的字符串?

标签 javascript

我想将包含 * 的嵌套数组更改为所有相同的 * 值。例如这个网格

  ["A", "*", "C"],
  ["D", "E", "p"],
  ["G", "H", "I"],

会变成

  ["*", "*", "*"],
  ["D", "E", "p"],
  ["G", "H", "I"],

这是迄今为止我的功能:

function changeArr(grid) {
    for (let arr of grid) {
        if (arr.includes("*")) {
            arr.forEach(element => element = "*")
        }
    }
    return grid;
}

我的函数仅返回通过该函数传递的相同初始网格。我也尝试过

function changeArr(grid) {
    for (let arr of grid) {
        if (arr.includes("*")) {
            arr.splice(0, 3, ["*","*","*"])
        }
    }
    return grid;
}

但这会在嵌套数组中创建一个嵌套数组!我觉得这可以通过 forEach 轻松完成,但不确定如何实现。

最佳答案

forEach内,您并没有真正修改数组。您正在向 forEach 传递一个值,该值对应于嵌套数组的值。因此,当您更改元素的变量值时,您只是在 forEach 回调中更改它。

有几种方法可以做到这一点......你可以这样做。

    let array = [
        ['A', '*', 'C'],
        ['A', 'B', 'C']
    ]
    
    for (let nestedArray of array) {
        if (nestedArray.includes('*')) {
            for (let i = 0; i < nestedArray.length; i++) nestedArray[i] = '*';
        }
    }
    
    console.log(array);

如果它们都具有相同的固定大小,则可以使用拼接(或者甚至将nestedArray重新分配给['*', '*', '*'])。

需要明确的是:如果你有这个数组: ['a', 'b', 'c']

并使用forEach迭代它:

array.forEach(元素 => ...)

element 将具有值“a”、“b”、“c”。但这些与数组的“a”、“b”、“c”不同。它们是副本。因此,将 element 重新分配给另一个值不会影响原始数组。

关于javascript - 如何将嵌套数组的值更改为所有相同的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64654753/

相关文章:

javascript - 计算换行符数量的函数在 $(window).on ('resize' ) 和 $(document).ready 上的作用不同

javascript - jquery变量作用域问题

javascript - jquery悬停不显示链接

javascript - 使用javascript查找元素相对于最新相对定位父元素的位置

javascript - 如何在 React Native 中切换状态

javascript - 将文本的周期性变化合并到一行中

javascript - Angular:在每一行上拆分 json 数据

javascript - 如何在 javascript 中使用 for 循环,jquery 获取表中的行数?

javascript - 使用位置分隔符删除重复行

javascript - 自动将 SVG 缩放到其父级