我想创建一个二维数组,用布尔值初始化,设置为false。目前我正在使用这种数组创建方法:
const rows = 3
const cols = 5
const nestedArray = new Array(rows).fill(
new Array(cols).fill(false)
)
nestedArray
看起来不错,但只要我更改nestedArray[0][2]
的值,nestedArray[1][2]
和nestedArray[2][2]
的值也会发生变化。
我想这是因为子数组是相同的,可能是因为它们通过引用而不是通过值填充到父数组中。
创建一组不相同的子数组会是一种优雅而有效的方法吗?
答案 0 :(得分:6)
您可以使用嵌套的Array.from()
来电:
const rows = 3
const cols = 5
const nestedArray = Array.from({ length: rows }, () =>
Array.from({ length: cols }, () => false)
);
nestedArray[0][1] = 'value'; // example of changing a single cell
console.log(nestedArray);
答案 1 :(得分:3)
您可以使用Array.from
方法创建第二个参数为map
方法的行,并为列创建Array.fill
。
const rows = 3
const cols = 5
const nestedArray = Array.from(Array(rows), _ => Array(cols).fill(false));
nestedArray[0][1] = true;
console.log(nestedArray)

另一种方法是在行数组上使用扩展语法...
,这样就可以在该数组上使用map
方法。
const rows = 3
const cols = 5
const nestedArray = [...Array(rows)].map(_ => Array(cols).fill(false))
nestedArray[0][1] = true;
console.log(nestedArray)

答案 2 :(得分:0)
const nestedArray = Array(rows).fill(false).map(x => Array(cols).fill(false))
尝试这个
答案 3 :(得分:0)
可能是这样的:
const rows = 3
const cols = 5
const nestedArray = new Array(rows).fill(0);
nestedArray.forEach((e, i, a) => a[i] = new Array(cols).fill(false));
console.log(nestedArray);

答案 4 :(得分:0)
与 Ori Drori 的答案非常相似,但要短一些:
const rows = 3;
const cols = 5;
const nestedArray = Array.from({length: rows}, () => Array(cols).fill(false));
nestedArray[1][2] = true;
console.log(nestedArray);
答案 5 :(得分:0)
已经有很多答案了,但也许有人觉得这个更易读:
let rows = 3;
let columns = 5;
let rowTemplate = Array(columns).fill(false);
let matrix = Array.from(Array(rows), () => [...rowTemplate]);
matrix[1][3] = true;
/*
[
[ false, false, false, false, false ],
[ false, false, false, true, false ],
[ false, false, false, false, false ]
]
*/