[英]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);
带有undefined
或null
的两个对象将首先放在数组中。 我如何让它们进入阵列的后面?
只需相应地修改比较功能即可。 见下文。 请注意,我使用== 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);
您可以检查undefined
或null
的值,然后将它们排序到数组的末尾,同时使用链式方法保留距离的顺序。
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.