我有像下面这样的 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,因此它被视为字符串
最佳答案
只需确保您拥有该对象的值,或者返回一个空字符串。
最短的代码路径是
(a[field] || "")
您指出如果a
没有该属性,它将把它视为空字符串。
它不会涵盖 a
为 null
的情况,因此如果发生这种情况,您仍然必须更仔细地检查
let obj = [{
name: 'aa',
age: '25',
address: 'Alaska'
},
{
name: 'cc',
age: '25',
address: 'California'
},
{
name: 'bb',
address: 'Texas'
}
]
let field = 'age'; //work for name and address
console.log(obj.sort((a, b) => (a[field] || "").toString().localeCompare((b[field] || "").toString())));
另一种方法是简单地比较这些值(再次注意,如果 a
或 b
为 null,则可能会出现问题)
let obj = [{
name: 'aa',
age: 25,
address: 'Alaska'
},
{
name: 'cc',
age: 3,
address: 'California'
},
{
name: 'bb',
address: 'Texas'
}
]
function sortAndPrint( obj, field ) {
console.log(`Sorting by ${field}`);
console.log(obj.sort((a, b) => a[field] > b[field] ) );
}
sortAndPrint(obj, 'name');
sortAndPrint(obj, 'address');
sortAndPrint(obj, 'age');
关于javascript - 当键不存在时排序 javascript 使用 localecompare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245938/