创建二维字符串数组

Two-dimensional string array creation

本文关键字:二维 字符串 数组 创建      更新时间:2023-09-26

我正试图以以下方式用javascript创建1个字符串的二维数组:

var panel = new Array(3).fill(new Array(3).fill('*'));

结果是

[
    ['*', '*', '*'],
    ['*', '*', '*'],
    ['*', '*', '*']
]

之后我需要替换中间字符串:

panel[1][1] = '#';

结果是

[
    ['*', '#', '*'],
    ['*', '#', '*'],
    ['*', '#', '*']
]

因此,原型fill函数似乎通过引用将对象填充到数组中。

是否可以强制fill函数用不同的对象实例填充数组?如果没有,在你看来,创建这种类似二维数组的方法是最好的?


更新

算法假设创建一个星号平面,然后用另一个符号替换许多星号,从而产生一些合理的结果。之后,它将被打印出来。

C中,它可以使用chars的矩阵和在任何索引处改变符号来完成。但就我们不能简单地更改javascript字符串中的单个符号而言,我正在努力寻找一些好的类似方法。

目前,我已经使用两个循环创建了二维数组,然后更改了所需的符号,然后使用mapjoin函数将结果连接到一个字符串中。但这是最好的解决方案吗?

谢谢。

不确定这个方法的效率,但使用JSON.stingify()将数组转换为字符串,然后通过JSON.parse()解析回原始格式,会使对象失去原始引用,并且可以毫无痛苦地工作。

var panel = new Array(3).fill(new Array(3).fill('*'));
var copy = JSON.parse(JSON.stringify(panel));
copy[1][1] = '#';
//you can assign the value of variable 'copy' back to 'panel' if required.
document.write(JSON.stringify(copy)); //for demo

您可以在没有额外变量的情况下将上述逻辑简化为单行代码,这样

var panel = JSON.parse(JSON.stringify(new Array(3).fill(new Array(3).fill('*'))));
panel[1][1] = '#';
document.write(JSON.stringify(panel)); //for demo

这是一个肮脏的修复程序,但我还是会给出它:

var panel = new Array(3).fill(new Array(3).fill('*'));
panel[1] = [panel[1][0],"#",panel[1][2]];
console.log(panel);
/*
Result:
[
    ['*', '*', '*'],
    ['*', '#', '*'],
    ['*', '*', '*']
]
*/