我正在尝试用这种方式在javascript中创建1个字符的字符串的二维数组:
var panel = new Array(3).fill(new Array(3).fill('*'));
结果是
[
['*', '*', '*'],
['*', '*', '*'],
['*', '*', '*']
]
之后我需要替换中间字符串:
panel[1][1] = '#';
结果是
[
['*', '#', '*'],
['*', '#', '*'],
['*', '#', '*']
]
因此,似乎原型fill
函数通过引用填充数组。
是否可以强制fill
函数用不同的对象实例填充数组?
如果不是,在您看来,创建这种类似二维数组的方法最好?
更新
算法假定创建一个星号平面,然后很多这些星号将被另一个符号替换,从而产生一些合理的结果。之后它将被打印出来。
在C
中,可以使用char
的矩阵并在任何索引处更改符号来完成。
但是,就我们不能简单地改变javascript字符串中的单个符号而言,我试图找到一些好的模拟。
目前我已经使用两个循环创建了二维数组,然后更改了我需要的符号,之后使用map
和join
函数将这个结果连接到一个字符串。但这是最好的解决方案吗?
谢谢。
答案 0 :(得分:1)
不确定此方法的效率但是使用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

答案 1 :(得分:0)
这是一种肮脏的解决方法,但无论如何我都会给它:
var panel = new Array(3).fill(new Array(3).fill('*'));
panel[1] = [panel[1][0],"#",panel[1][2]];
console.log(panel);
/*
Result:
[
['*', '*', '*'],
['*', '#', '*'],
['*', '*', '*']
]
*/