繁体   English   中英

如何使用sort将undefined或null推到数组的后面?

[英]How to push undefined or null to the back of an array with sort?

我在数组中有3个项目,每个项目都有一个名为distanceFromUser的属性,它只是一个number 这些对象中有两个undefined为该属性undefined

如果我运行items.sort((a,b) => a.distanceFromUser - b.distanceFromUser); 带有undefinednull的两个对象将首先放在数组中。 我如何让它们进入阵列的后面?

只需相应地修改比较功能即可。 见下文。 请注意,我使用== null ,它还会检查未定义的(而===不会)。 使用or运算符( a.distanceFromUser || ... )或类似方法的其他建议解决方案也相当可观,但是如果distanceFromUser为0,则容易出错。

 let items = [ { distanceFromUser: 1 }, { distanceFromUser: 23 }, { distanceFromUser: undefined }, { distanceFromUser: 12 }, { distanceFromUser: 2 }, { distanceFromUser: 9 }, { distanceFromUser: null }, ]; items.sort((a, b) => { if (b.distanceFromUser == null) return -1; if (a.distanceFromUser == null) return 1; return b.distanceFromUser - a.distanceFromUser; }); console.log(items); 

您可以检查undefinednull的值,然后将它们排序到数组的末尾,同时使用链式方法保留距离的顺序。

 var items = [{ id: 1, distanceFromUser: undefined }, { id: 2, distanceFromUser: 1 }, { id: 3, distanceFromUser: 2 }, { id: 4, distanceFromUser: 5 }, { id: 5, distanceFromUser: 1 }, { id: 6, distanceFromUser: undefined }, { id: 7, distanceFromUser: null }, { id: 8, distanceFromUser: null }]; items.sort( (a, b) => (a.distanceFromUser === undefined || a.distanceFromUser === null) - (b.distanceFromUser === undefined || b.distanceFromUser === null) || a.distanceFromUser - b.distanceFromUser ); console.log(items); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

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

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