我有一个以下格式的数组。我已按字母顺序对数组进行排序。但是数组中的每个元素都存在一个子数组。我也想按字母顺序对它们进行排序。
var myObj = [
{
"name":"John",
"items": [
{ "id":1, "car":"maruti" },
{ "id":2, "car":"wolks" },
{ "id":3, "car":"bmw" }
]
},
{
"name":"Peter",
"items": [
{ "id":4, "car":"alto" },
{ "id":5, "car":"swift" },
]
}];
这是我用来对主数组进行排序的代码。在这里,我想按字母顺序对“items”数组进行排序。
myObj.sort(function(a, b) {
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();
if (nameA < nameB) {
return -1
}
if (nameA > nameB){
return 1
}
return 0
});
最佳答案
除了对数组中的直接项进行排序之外,在 sort
函数中做任何其他事情都感觉不对 - 我会迭代两次,一次是为了对数组进行排序myObj
,并一次对每个 items
属性进行排序。
您还可以使用localeCompare
来简化您的代码:
var myObj=[{"name":"John","items":[{"id":1,"car":"maruti"},{"id":2,"car":"wolks"},{"id":3,"car":"bmw"}]},{"name":"Peter","items":[{"id":4,"car":"alto"},{"id":5,"car":"swift"},]}]
myObj.sort((a, b) => a.name.localeCompare(b.name));
myObj.forEach(({ items }) => items.sort((a, b) => a.car.localeCompare(b.car)));
console.log(myObj);
关于javascript - 在javascript中按字母顺序对数组及其对象键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50637659/