【发布时间】:2019-12-29 10:19:56
【问题描述】:
我正在学习一门课程,当我到达挑战部分时,老师要求写下一个代码,该代码对该对象数组进行排序,该数组包含一些具有以下属性的“待办事项”:“文本和已完成(布尔值)” 并且排序应该是这样的:未完成的 todos (false) 应该是第一个,完成的应该是最后一个。 我写了一个代码,它实际上工作并按要求对数组进行了排序,但是当我看到教练如何解决这个挑战时,我有点困惑,因为他使用了不同的方式,所以我想在互联网上询问哪个(我的代码或教练的)是最好的和更准确的。 我实际上很困惑,因为我的代码有效,但是我只给了 sort() 函数一个参数或参数 (a),它按照我的意愿对数组进行了排序,所以我需要一个解释
这是基本的对象数组:
// The basic objects array:
const todos = [{
text: 'wake up',
completed: true
}, {
text: 'get some food',
completed: false
}, {
text: 'play csgo',
completed: false
}, {
text: 'play minecraft',
completed: true
}, {
text: 'learn javascript',
completed: false
}];
这是我写的代码:
// My code
let sortTodos = function(todos) {
todos.sort(function(a) {
if (a.completed === false) {
return -1;
}
else if (a.completed === true){
return 1;
}
else {
return 0;
}
})
}
sortTodos(todos);
console.log(todos);
导师代码
// The instructor's code
const sortTodos = function (todos) {
todos.sort(function (a, b) {
if (!a.completed && b.completed) {
return -1
} else if (!b.completed && a.completed) {
return 1
} else {
return 0
}
})
}
输出是:
[ { text: 'get some food', completed: false },
{ text: 'play csgo', completed: false },
{ text: 'learn javascript', completed: false },
{ text: 'play minecraft', completed: true },
{ text: 'wake up', completed: true } ]
【问题讨论】:
-
IMO 你可以简单地做到这一点
const final = todos.sort((a,b)=>a.completed - b.completed)
标签: javascript arrays sorting boolean boolean-expression