【发布时间】:2018-03-12 23:26:07
【问题描述】:
我有下面这样的json
[
{name:'aa',age:'1Y',address:'Alaska'},
{name:'cc',age:'4Years',address:'California'},
{name:'mm',address:'Texas'}
]
每当我使用名称和地址进行排序时,它都会起作用,但如果我尝试按年龄排序,则会引发运行时错误,因为它在最后一个条目中丢失。
这是我的尝试
let obj=[
{name:'aa',age:'2y',address:'Alaska'},
{name:'cc',age:'4y',address:'California'},
{name:'bb',address:'Texas'}
]
let field='age'; //work for name and address;
let mode='string';
if(mode!='number'){
console.log (obj.sort((a, b) => a[field].toString().localeCompare(b[field].toString())));
}
else{
console.log(obj.sort((a, b) => a[field] -b[field]))
}
当键不存在时忽略条目的最佳方法是什么,我是否需要在排序之前有单独的循环来检查键。缺少钥匙的条目将在底部。
Ps:年龄从业务逻辑开始永远不会超过 10 年,它们可以以任何格式出现,例如 1,1Y,因此它被视为字符串
【问题讨论】:
-
没有年龄的物品和有年龄的物品应该如何比较?他们应该小于吗?比...更棒?无论您想发生什么,都将其编码到您的排序回调中。
-
编辑了问题
-
@sumit 您更改的答案将以错误的方式对年龄进行排序(nl,3 将在 25 岁之后,而 24 将在 25 岁之前),而我的答案确实对它们进行了正确排序。是否有其他理由更改已接受的答案?
-
接受的答案在底部有缺少键的条目,在我的业务逻辑中,年龄总是小于
标签: javascript arrays sorting ecmascript-6