按对象属性排序,使用 .sort [重复] 给出混合结果
Posted
技术标签:
【中文标题】按对象属性排序,使用 .sort [重复] 给出混合结果【英文标题】:sorting by object property giving mixed results using .sort [duplicate] 【发布时间】:2022-01-14 11:35:05 【问题描述】:在 Chrome 实时浏览器中尝试进行柯里化时,我得到了一些非常奇怪的结果,我很好奇为什么我的日志没有按预期输出。
为什么我在 Chrome 中运行以下代码时得到相同的数组顺序?在堆栈溢出中注入的代码运行程序给了我正确的响应,但我还附上了一张我直接在控制台中运行相同代码的图像,它从 Chrome 中返回了不正确的日志?
const people = [
age: 15, name: 'Bob' ,
age: 18, name: 'Adrian' ,
]
function custom_sort(key)
return function(a, b)
if (a[key] < b[key]) return -1
else if (a[key] > b[key]) return 1
else return 0
const sort_name = custom_sort('name')
const sort_age = custom_sort('age')
people.sort(sort_name);
console.log(people);
people.sort(sort_age);
console.log(people);
const people = [
age: 15, name: 'Bob' ,
age: 18, name: 'Adrian' ,
]
function custom_sort(key)
return function(a, b)
if (a[key] < b[key]) return -1
else if (a[key] > b[key]) return 1
else return 0
const sort_name = custom_sort('name')
const sort_age = custom_sort('age')
people.sort(sort_name);
console.log(people);
people.sort(sort_age);
console.log(people);
使用 Chrome 时的实际反应:
【问题讨论】:
【参考方案1】:Chrome 控制台延迟评估数组。 因此,在代码执行方面,它可以按您的预期工作。
如果您要查看更改后的数据,您可以这样做...
console.log([...people]);
您的代码进行了上述更改...
people.sort(sort_name);
console.log([...people]);
people.sort(sort_age);
console.log([...people]);
产生...
注意
如果您在 console.log 行中添加断点,您会注意到在代码执行方面,这些值是正确的。它们只是在控制台中不正确。
按名称排序
按年龄排序
【讨论】:
这看起来很糟糕,因为我无法在不使用扩展语法的情况下查看排序数组,否则在实时调试时我会得到混合结果。我感谢您的工作,但我认为这绝不是有意的行为。 Array.sort 的存在时间远远超过 es6 约定。 代码执行得很好,它只是懒惰地评估数组的 Chrome 控制台。 Chrome javascript 执行得很好。如果您使用 Chrome 开发工具中的“Sources”选项卡并在 JS 的 console.log 行上添加断点,您实际上会注意到这些值是正确的,只是控制台正在等待这两个 .sort( ) 在将数组打印到控制台之前调用完成。我很清楚 array.sort 已经存在了多长时间。我是一名高级开发人员。 @simon 我已经更新了我的答案以包含示例。我从不推荐通过 console.log 调试值,使用 chrome 内置的实际 chrome 检查器/调试器更可靠,因为它会在断点处暂停代码执行。 如果不用于调试,您究竟会推荐使用 console.log 做什么? @simon 你可以使用它进行调试,就像你可以使用驴子通勤20英里而不是汽车一样。我总是建议使用内置调试器进行调试。因此,要回答您的问题,我完全不建议您使用 console.log。以上是关于按对象属性排序,使用 .sort [重复] 给出混合结果的主要内容,如果未能解决你的问题,请参考以下文章
Java Sorting:按属性对对象数组进行排序,对象不允许使用Comparable