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)
您需要在数组内部获取独立的对象引用,而不是从字面上获取常量值。
通过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)
在中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是一种动态类型的语言,从长远来看,这种思维会伤害您。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |