Попытка сортировки ключей объекта на основе дочернего свойства - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот объект:

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 ]

0 голосов
/ 13 сентября 2018

Вот решение, использующее lodash.

Используйте для него _.map и _.sort.

  • Сначала _.map для массива order иname.
  • Затем _.sort и _.map name

Используя цепочку lodash, упростите чтение кода.


 _(myObject)
   .map((v, k) => ({order: v.order, name: k}))
   .sortBy('order')
   .map('name')
   .value()
0 голосов
/ 12 сентября 2018

сначала используйте Object.entries , а затем сортируйте по свойству order его второго элемента (, поскольку 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])
)
0 голосов
/ 12 сентября 2018

    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)
0 голосов
/ 12 сентября 2018

Вы можете просто использовать 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);
...