按对象属性排序,使用 .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

JavaScript按属性值对字典进行排序[重复]

Swift 2.0 按属性对对象数组进行排序

如何使用jquery或javascript对对象数组进行排序[重复]

按对象某属性排序的几种方法

Java按日期升序排序列表对象[重复]