我想将包含 * 的嵌套数组更改为所有相同的 * 值。例如这个网格
["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/