如何根据Javascript中对象内的字母对象进行排序

塔利维

我有下一个对象:

ctrl.items

此对象包含其他对象:

items: {
    OBJ1: {
        label: 'banana'
    },
    OBJ2: {
        label: 'apple'
    },
    OBJ3: {
        label: 'cat'
    }
}

在 UI 中,我将项目下的每个对象的标签显示为列表的一部分。我希望此列表按字母顺序排序,因此列表将是:apple 香蕉猫

所以排序后我的预期对象应该是

  items: {
        OBJ1: {
            label: 'apple'
        },
        OBJ2: {
            label: 'banana'
        },
        OBJ3: {
            label: 'cat'
        }
    }

我该怎么做?我尝试了各种排序示例,但没有任何效果。例如我试过:

 ctrl.items.sort((a,b) => (a.label > b.label) ? 1 : ((b.label > a.label) ? -1 : 0));
比诺东

items是一个对象,而不是一个数组,所以你不能.sort在它上面使用

但是,您可以通过使用将对象转换为数组 Object.entries(items)

下面是一个例子:

let items = {
    OBJ1: {
        label: 'banana'
    },
    OBJ2: {
        label: 'apple'
    },
    OBJ3: {
        label: 'cat'
    }
}

// to be used by `Array.sort()`
function compare(a, b) {
    return a < b ? -1 
         : a > b ?  1
         : 0
}

// convert from object to key-value pair array
let entries = Object.entries(items)

// take out the keys
let keys = entries.map(entry => entry[0])

// take out the values
let values = entries.map(entry=>entry[1])

// store the value by label
values.sort((a,b) => compare(a.label, b.label))

// rebuild the object from the original keys and sorted values
let result = Object.fromEntries((keys.map((key,i) => [key, values[i]])))

/* 
result will be:
{
  OBJ1: { label: 'apple' }, 
  OBJ2: { label: 'banana' }, 
  OBJ3: { label: 'cat' }
} 
*/

- 添加

我不确定您为什么以要求的格式存储值。您也可以将值存储在数组中。这样你就可以直接对数组进行排序。

例如:

let labels = [ 'banana', 'apple', 'cat' ]

labels.sort()

// the labels is now [ 'apple', 'banana', 'cat' ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据名称和查询字符串按字母顺序对对象数组进行排序?

如何对对象的javascript数组进行数字排序,然后再按字母排序?

如何根据对象的属性对对象列表进行排序?

如何根据对象的值长度对对象进行排序

根据日期键对JavaScript对象进行排序

根据值对Javascript对象进行排序

如何在javascript中对嵌套的对象数组进行排序?

如何根据价格对数组中的对象进行排序

如何在javascript中对对象数组进行排序?

通过Javascript中的键按字母顺序对对象的对象进行排序

如何根据对象属性对数组中的对象键进行排序?

如何根据Scala中的对象字段对列表对象进行排序?

如何过滤对象数组并根据对象在数组中显示的次数进行排序

如何根据对象的值对对象数组进行分组排序?

如何将对象分组到数组中并根据对象属性对其进行排序

如何按NSArray内对象内的对象对NSArray进行排序?

根据多个属性对javascript对象进行排序

如何根据对象的属性对列表进行排序?

根据日期属性对javascript对象进行排序

如何按数值对javascript中的对象进行排序

根据一个属性按字母顺序对数组中的对象进行排序

如何根据对象的属性对对象数组进行排序

JavaScript 根据值对对象数组进行排序(条件排序)

如何根据对象的属性对添加对象的位置进行排序

如何根据对象键对数组 ob 对象进行排序?

如何根据键对对象的javascript数组进行排序

如何根据特定字母对对象数组进行排序?

根据Javascript中数组内对象数组的条件进行过滤

如何在 JavaScript 中根据纪元时间对对象数组进行排序