二维字符串数组创建

时间:2016-04-19 02:38:04

标签: javascript arrays

我正在尝试用这种方式在javascript中创建1个字符的字符串的二维数组:

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

结果是

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

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

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

结果是

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

因此,似乎原型fill函数通过引用填充数组。

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

更新

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

C中,可以使用char的矩阵并在任何索引处更改符号来完成。 但是,就我们不能简单地改变javascript字符串中的单个符号而言,我试图找到一些好的模拟。

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

谢谢。

2 个答案:

答案 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:
[
    ['*', '*', '*'],
    ['*', '#', '*'],
    ['*', '*', '*']
]
*/