如何创建定义长度的预填充数组?

Dan*_*ndy 1 javascript arrays ecmascript-6

我正在尝试创建一个具有定义长度的数组,并用空数组填充它。我已经尝试过使用@stpoa的答案在此处给出的所有可能性,但是我的数组无法正常运行。

给定代码(为示例起见,我对其进行了简化):

const tasksArray = Array(3).fill([])
const tasksArray2 = [[], [], []]
const tasks = ['task1', 'task2']

const fillWithData = (array) => {
  tasks.forEach(task => {
    array[0].push(task)
  })
}
Run Code Online (Sandbox Code Playgroud)

给我一个不正确的输出,tasksArray显然给一个正确的tasksArray2硬编码输出

fillWithData(tasksArray) // [['task1', 'task2'], ['task1', 'task2'], ['task1', 'task2']] => not OK, duplicates values!
fillWithData(tasksArray2) // [['task1', 'task2'], [], []] => that's OK
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您需要在数组内部获取独立的对象引用,而不是从字面上获取常量值。

通过Array.from使用具有length属性和内置映射功能的对象,您可以获得独立数组的数组。

const tasksArray = Array.from({ length: 3 }, _ => [])
const tasks = ['task1', 'task2']

const fillWithData = (array) => {
  tasks.forEach(task => {
    array[0].push(task)
  })
};

fillWithData(tasksArray);
console.log(tasksArray);
Run Code Online (Sandbox Code Playgroud)


Tha*_*you 5

在中taskArray[]您使用的是作为引用传递的,taskArray所有元素都引用同一数组。

在中taskArray2,您有三个单独的空数组[],每个都有自己的引用。因此,您不会得到重复的值。

如果您希望以编程方式创建一个空数组,请使用Array.from-

const fillEmptyArrays = (count) =>
  Array.from(Array(count), _ => [])

const tasks =
  fillEmptyArrays(3)

console.log(tasks)
// [ [], [], [] ]
Run Code Online (Sandbox Code Playgroud)

并且不要Array在变量名中包含类型名称tasksArray; 随便命名tasks。JavaScript是一种动态类型的语言,从长远来看,这种思维会伤害您。