javascript - 当键不存在时排序 javascript 使用 localecompare

标签 javascript arrays sorting ecmascript-6

我有像下面这样的 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没有该属性,它将把它视为空字符串。

它不会涵盖 anull 的情况,因此如果发生这种情况,您仍然必须更仔细地检查

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())));

另一种方法是简单地比较这些值(再次注意,如果 ab 为 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/

相关文章:

javascript - 表单验证(如果&然后)

javascript - 钛,保存上次查看窗口的状态

javascript - 小书签在粘贴到控制台时可以正常工作,但在单击书签时则无法正常工作

php - MySQL+PHP : How to paginate data from complex query with ORDER BY on user-selected column

java - 如果我在两个子类中以不同方式覆盖 compareTo() 会发生什么

javascript - Anyway 在 Ext js 中实现 tagcloud 吗?

c - 以下 C 代码有什么问题?

C++,以下代码的计算顺序

arrays - Postgres : why does this GIN index not used for this "object in array" query

带自定义滚动条的 Jquery 选项卡式导航