创建二维字符串数组

3

我正在尝试用JavaScript创建一个由一字符字符串构成的二维数组,代码如下:

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

结果是

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

接下来我需要替换中间的字符串:

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

结果是:

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

看起来原型fill函数通过引用填充数组。

是否可能强制fill函数使用不同的对象实例填充数组? 如果不行,你认为哪种方法创建这样的二维数组最好?


更新

算法假设创建一个由星号组成的平面图形,然后将其中许多星号替换为其他符号,从而创建出一些合理的结果。然后将其打印出来。

C中,可以使用char矩阵并更改任何索引处的符号来完成此操作。 但由于我们无法简单地更改javascript字符串中的单个符号,因此我正在尝试寻找一些良好的类比。

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

谢谢。


只是为了明确...那个结果是你想要的输出吗? - omarjmh
1
@jordanhendrix 不,那个结果是真正的 JavaScript 结果。期望的输出是矩阵中只有一个 '#' 字符串。 - Yuriy Yakym
@YuraYakym 如果我的解决方案对你有帮助,请告诉我。 - Rajshekar Reddy
2个回答

1

不确定这种方法的效率,但是使用JSON.stringify()将数组转换为字符串,然后通过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


0

这种方法有点不太正规,但我还是会提供一下:

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

/*
Result:
[
    ['*', '*', '*'],
    ['*', '#', '*'],
    ['*', '*', '*']
]
*/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接