代码之家  ›  专栏  ›  技术社区  ›  Batman

尝试根据子属性对对象键进行排序

  •  1
  • Batman  · 技术社区  · 6 年前

    我有个目标:

    var myObject = {
        cat: {
            order: 1
        },
    
        mouse: {
            order: 4
        },
    
        dog: {
            order: 2
        },   
    
        shark: {
            order: 3
        }
    }
    

    我正试图回来: ["cat", "dog", "shark", "mouse"]

    我试过:

    _.sortBy(x, function(e) { return e.order} )

    4 回复  |  直到 6 年前
        1
  •  7
  •   amrender singh    6 年前

    Object.keys() Array.sort() 为了它。

    • Object.keys() .
    • 只需通过传递一个自定义 Comparator

    var myObject = { cat: { order: 1 }, mouse: { order: 4 }, dog: { order: 2 }, shark: { order: 3 } };
    
    let result = Object.keys(myObject).sort((a,b)=> myObject[a].order -  myObject[b].order);
    
    console.log(result);
        2
  •  5
  •   Sphinx    6 年前

    使用 Object.entries 秩序 Object.entries 返回给定对象自身可枚举属性的数组 [键,值] ),最后使用 Array.map 得到你需要的东西。

    var myObject = {
      cat: {
        order: 1
      },
      mouse: {
        order: 4
      },
      dog: {
        order: 2
      },
      shark: {
        order: 3
      }
    }
    
    console.log(
      Object.entries(myObject).sort((a, b) => {
        return a[1].order - b[1].order
      }).map(item => item[0])
    )
        3
  •  0
  •   Steve Bohmbach    6 年前

        var myObject = {
        cat: {
            order: 1
        },
    
        mouse: {
            order: 4
        },
    
        dog: {
            order: 2
        },   
    
        shark: {
            order: 3
        }
    }     
    let oKeys = Object.keys(myObject)
    
         let tempArray = []
    
         oKeys.forEach(function(key) {
            tempArray[myObject[key]['order']-1] = key
         })
              
       
         console.log(tempArray)
        4
  •  0
  •   Ali Yang    6 年前

    下面是一个使用 lodash

    使用 _.map _.sort 为了它。

    • 第一, 到数组 order name .
    • _.地图

    通过使用lodash链,使代码易于阅读。


     _(myObject)
       .map((v, k) => ({order: v.order, name: k}))
       .sortBy('order')
       .map('name')
       .value()