如何在JavaScript中创建一个空的二维数组副本?

4

我正在进行一个项目,在其中需要在JavaScript中创建一个空的2D数组副本。我有一个原始数组,其中填充了一个月份内的天数:

var originalArray = [
    [1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19, 20, 21], 
    [22, 23, 24, 25, 26, 27, 28], 
    [29, 30, 31]
];

期望结果:

copiedArray = [
    [, , , , , , ], 
    [, , , , , , ], 
    [, , , , , , ], 
    [, , , , , , ], 
    [, , ]
];

我该如何创建一个与原始数组具有相同元素数量的新空数组? 提前谢谢!

我已尝试嵌套循环但没有成功。


1
哇哇哇,你想要一个数组还是只是一个填充了undefined的数组? - zenly
只是一个空数组。感谢澄清。 - William
5个回答

5

像这样的东西?

var originalArray = [
    [1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19, 20, 21], 
    [22, 23, 24, 25, 26, 27, 28], 
    [29, 30, 31]
];

const copiedArray = originalArray.map(a => Array(a.length).fill())

console.log(copiedArray)


3

像这样

const originalArray = [
    [1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19, 20, 21], 
    [22, 23, 24, 25, 26, 27, 28], 
    [29, 30, 31]
];

const copiedArray = originalArray.map(row => {
  return new Array(row.length);
});

console.log( copiedArray );


0
    let newArray = originalArray.map(row => row.map(column => ""))

上面的代码似乎像你说的那样完成了工作。如果你想将空字符串更改为 null 或 undefined,它仍然可以正常工作,没有任何问题。你可以运行下面的示例来查看它是否符合你的规格要求。

let originalArray = [
    [1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19, 20, 21], 
    [22, 23, 24, 25, 26, 27, 28], 
    [29, 30, 31]
];

let newArray = originalArray.map(row => row.map(column => ""))

console.log(newArray)


0
你可以这样使用 Array.fromfill()

const original = [
    [1, 2, 3, 4, 5, 6, 7],
    [8, 9, 10, 11, 12, 13, 14],
    [15, 16, 17, 18, 19, 20, 21],
    [22, 23, 24, 25, 26, 27, 28],
    [29, 30, 31]
];

const copied = Array.from(original, el => Array(el.length).fill());

console.log(copied);


0
也许你可以尝试这个?
var copiedArray = new Array(originalArray.length);
for (var i = 0; i < originalArray.length; i++) {
    copiedArray[i] = new Array(originalArray[i].length);
}

如果你想要让它变成递归的,你也可以这样做:

function createEmptyCopy(array) {
  var copiedArray = new Array(array.length);
  
  for (var i = 0; i < array.length; i++) {
    if (Array.isArray(array[i])) {
      copiedArray[i] = createEmptyCopy(array[i]);
    } else {
      copiedArray[i] = undefined;
    }
  }
  
  return copiedArray;
}

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