【发布时间】:2021-07-11 04:19:58
【问题描述】:
所以我有一些数据:
const unorderedData = [
{checklistIndex: 1, id: 1532, isDone: true, taskName: "Task 3", tasksKey: "2Task 3"},
{checklistIndex: 2, id: 3969, isDone: false, taskName: "Task 1", tasksKey: "0Task 1"},
{checklistIndex: 3, id: 561, isDone: true, taskName: "Task 2", tasksKey: "1Task 2"},
{checklistIndex: 4, id: 6270, isDone: false, taskName: "Task 4", tasksKey: "3Task 4"},
{checklistIndex: 5, id: 2151, isDone: true, taskName: "Task 3", tasksKey: "2Task 3"},
{checklistIndex: 6, id: 7776, isDone: false, taskName: "Task 5", tasksKey: "4Task 5"},
{checklistIndex: 7, id: 689, isDone: false, taskName: "Task 5", tasksKey: "4Task 5"}
];
我想订购它们
isDone === true 任务应该从 1 到它的长度排序,
所有 isDone === false 任务应该从 isDonelength 到 isNotDoneLenght 排序。
所以数据应该从无序数据变成这样:
const correctAnswer = [
{checklistIndex: 4, id: 3969, isDone: false, taskName: "Task 1", tasksKey: "0Task 1"},
{checklistIndex: 5, id: 6270, isDone: false, taskName: "Task 4", tasksKey: "3Task 4"},
{checklistIndex: 6, id: 7776, isDone: false, taskName: "Task 5", tasksKey: "4Task 5"},
{checklistIndex: 7, id: 689, isDone: false, taskName: "Task 5", tasksKey: "4Task 5"},
{checklistIndex: 1, id: 1532, isDone: true, taskName: "Task 3", tasksKey: "2Task 3"},
{checklistIndex: 2, id: 561, isDone: true, taskName: "Task 2", tasksKey: "1Task 2"},
{checklistIndex: 3, id: 2151, isDone: true, taskName: "Task 3", tasksKey: "2Task 3"}
];
这是我的功能:
const fixData = (dataToOrder) => {
let fixedData = []
let doneSelectedTasks = dataToOrder.filter(itemData => itemData.isDone);
let notDoneSelectedTasks = dataToOrder.filter(itemData => !itemData.isDone)
let fixedDoneTasks = doneSelectedTasks.map((itemData, index) => {
let newItemData = itemData;
newItemData.checklistIndex = index+1;
return newItemData;
})
let indexForUnfinishedSelectedTasks = fixedDoneTasks.length+1;
console.log(indexForUnfinishedSelectedTasks)
let fixedNotDoneTasks = notDoneSelectedTasks.map((itemData) => {
let newItemData = itemData;
newItemData.checklistIndex = indexForUnfinishedSelectedTasks;
indexForUnfinishedSelectedTasks += 1;
return newItemData;
})
fixedData = fixedNotDoneTasks.concat(fixedDoneTasks);
return fixedData
}
现在使用这个函数我得到了这个结果
[
{checklistIndex: 4, id: 3969, isDone: false, taskName: 'Task 1', tasksKey: '0Task 1'},
{checklistIndex: 5, id: 6270, isDone: false, taskName: 'Task 4', tasksKey: '3Task 4'},
{checklistIndex: 6, id: 7776, isDone: false, taskName: 'Task 5', tasksKey: '4Task 5'},
{checklistIndex: 7, id: 689, isDone: false, taskName: 'Task 5', tasksKey: '4Task 5'},
{checklistIndex: 1, id: 1532, isDone: true, taskName: 'Task 3', tasksKey: '2Task 3'},
{checklistIndex: 2, id: 561, isDone: true, taskName: 'Task 2', tasksKey: '1Task 2'},
{checklistIndex: 3, id: 2151, isDone: true, taskName: 'Task 3', tasksKey: '2Task 3'}
]
这显然是错误的,谁能告诉我为什么。是我眼睛不好还是我的代码有问题
【问题讨论】:
-
函数的输出等于您自己定义的预期输出。我不确定我是否理解问题所在。
-
"isDone === false 任务从 isDonelength 排序到 isNotDoneLenght"。
isDonelength是什么? -
"which apperantly is wrong" 是被某个在线编码网站或你的老师拒绝了吗?预期的输出和你的输出是一样的。
-
此代码的唯一问题是
let newItemData = itemData不会创建数据副本。它仍然会改变原始对象。您可以使用:let newItemData = { ...itemData } -
@adiga Iment isDone === trues 过滤列表长度我知道我会尝试并回复。这也是一个反应原生项目,但我现在正在研究这部分,这实际上是我自己的问题
标签: javascript node.js arrays sorting