繁体   English   中英

具有不存在值的 Sort()

[英]Sort() with non-existent values

我知道应该将未定义的值发送到结果的末尾,但是不存在的键呢? (不应该是一样的吗?)在这些情况下似乎 sort 不起作用:

 const names = [ { name: "John", age: 27 },{ name: "Charles", },{ name: "Ellen", age: 30 },{ name: "Mario", }, { name: "Emanuelle", age: 18 } ] names.sort(function (a, b) { if (a.age > b.age) return 1; if (a.age < b.age) return -1; return 0; }) console.log(names) // Sort not working, prints original order

理想情况下,我想修改“名称”数组而不是创建/重新分配更多变量。

所以检查是否定义了年龄。 如果不将其设置为较大的数字以强制它结束。

 const names = [ { name: "John", age: 27 },{ name: "Charles", },{ name: "Ellen", age: 30 },{ name: "Mario", }, { name: "Emanuelle", age: 18 } ] function getAge (obj) { return obj.age === undefined? Number.MAX_VALUE: obj.age; } names.sort(function (a, b) { // if (a.age === b.age) { // return a.name.localeCompare(b.name); // } return getAge(a) - getAge(b); }) console.log(names);

您的默认排序解决方案设置为将项目保留在其当前 position --> return 0中。 您可以提供另一个条件来捕获undefined并返回 -1

 const names = [{ name: "John", age: 27 }, { name: "Charles" }, { name: "Ellen", age: 30 }, { name: "Mario" }, { name: "Emanuelle", age: 18 }]; names.sort(function (a, b) { if(b.age === undefined) return -1; if (a.age > b.age) return 1; if (a.age < b.age) return -1; return 0; }) console.log(names) // Sort not working, prints original order

您可以检查该属性,如果不存在,则将此对象移至底部。 对于 rest 按age排序。

 const names = [{ name: "John", age: 27 }, { name: "Charles" }, { name: "Ellen", age: 30 }, { name: "Mario" }, { name: "Emanuelle", age: 18 }]; names.sort((a, b) => ('age' in b) - ('age' in a) || // sort object without `age` to bottom a.age - b.age // sort by `age` ); console.log(names);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

排序无法正常工作,因为undefined的任何数字运算都是NaN IE: 1 - undefined = NaN

对于这种排序,您可以使用解构+默认值,试试这个:

const names = [
  {
    name: "John",
    age: 27
  },{
    name: "Charles",
  },{
    name: "Ellen",
    age: 30
  },{
    name: "Mario",
  },
  {
    name: "Emanuelle",
    age: 18
  }
]

names.sort(  ({age : agea = Number.MAX_VALUE}, {age : ageb = Number.MAX_VALUE}) => agea-ageb)

console.log(names)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM