奇怪的 Leetcode 错误:Array.fill() 与新的 Array.from()
Weird Leetcode Bug: Array.fill() vs new Array.from()
我正在研究 Leetcode Problem 1770 和 运行 一些奇怪的行为,希望有人能帮助我理解。
这是一个动态规划问题,需要您实例化一个长度为 m
的二维数组。很直接。
奇怪的是,我生成二维数组的语法导致问题失败,但替代语法通过了所有测试。据我所知,这两行输出相同的结果。
我的语法:
// const m = 3
let memo = new Array(m).fill(new Array(m).fill(-Infinity))
console.log({memo})
// stdout: {
// memo: [
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ]
// ]
// }
替代语法:
// const m = 3
let memo = Array.from(Array(m), () => Array(m).fill(-Infinity))
console.log({memo})
// stdout: {
// memo: [
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ]
// ]
// }
在我看来,两者的输出完全相同。然而,一个人通过了所有测试,而没有通过。给出了什么?
在第一种情况下,您使用相同的 Array
实例填充数组。在第二种情况下,每一行都是新的 Array
因为您提供了一个工厂函数。
const m = 3;
let memo = new Array(m).fill(new Array(m).fill(-Infinity));
console.log(memo[0] === memo[1]); // true
const m = 3
let memo = Array.from(Array(m), () => Array(m).fill(-Infinity));
console.log(memo[0] === memo[1]); // false
附带说明一下,您不需要传递 Array
作为 Array.from
的第一个参数,一个 ArrayLike
就足够了:
const m = 3
let memo = Array.from({ length: m }, () => Array(m).fill(-Infinity));
console.log(memo);
我正在研究 Leetcode Problem 1770 和 运行 一些奇怪的行为,希望有人能帮助我理解。
这是一个动态规划问题,需要您实例化一个长度为 m
的二维数组。很直接。
奇怪的是,我生成二维数组的语法导致问题失败,但替代语法通过了所有测试。据我所知,这两行输出相同的结果。
我的语法:
// const m = 3
let memo = new Array(m).fill(new Array(m).fill(-Infinity))
console.log({memo})
// stdout: {
// memo: [
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ]
// ]
// }
替代语法:
// const m = 3
let memo = Array.from(Array(m), () => Array(m).fill(-Infinity))
console.log({memo})
// stdout: {
// memo: [
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ],
// [ -Infinity, -Infinity, -Infinity ]
// ]
// }
在我看来,两者的输出完全相同。然而,一个人通过了所有测试,而没有通过。给出了什么?
在第一种情况下,您使用相同的 Array
实例填充数组。在第二种情况下,每一行都是新的 Array
因为您提供了一个工厂函数。
const m = 3;
let memo = new Array(m).fill(new Array(m).fill(-Infinity));
console.log(memo[0] === memo[1]); // true
const m = 3
let memo = Array.from(Array(m), () => Array(m).fill(-Infinity));
console.log(memo[0] === memo[1]); // false
附带说明一下,您不需要传递 Array
作为 Array.from
的第一个参数,一个 ArrayLike
就足够了:
const m = 3
let memo = Array.from({ length: m }, () => Array(m).fill(-Infinity));
console.log(memo);