JS - 对对象中的子对象进行排序

时间:2017-10-16 23:58:28

标签: javascript boolean

我试图找到是否有办法使用bool值对对象内的对象进行排序。我还没有找到任何可以帮助的东西,甚至不确定是否可能。

我的对象示例如下:

{
"Music": {
    "Key": "Music",
    "Title": "Music",
    "Icon": "t-music",
    "Colour": "blue",
    "Active": false
},
"The Arts": {
    "Key": "The Arts",
    "Title": "The Arts",
    "Icon": "t-arts",
    "Colour": "blue",
    "Active": false
},
"Social": {
    "Key": "Social",
    "Title": "Social",
    "Icon": "t-social",
    "Colour": "yellow",
    "Active": true
}

}

无论如何都要根据" Active"在父对象中对这些对象进行排序。布尔?

3 个答案:

答案 0 :(得分:2)

虽然对象没有排序顺序,但您可以根据Active bool在数组中组织这些对象。使用.sort().map()

var obj = {
  "Music": {
    "Key": "Music",
    "Title": "Music",
    "Icon": "t-music",
    "Colour": "blue",
    "Active": false
  },
  "The Arts": {
    "Key": "The Arts",
    "Title": "The Arts",
    "Icon": "t-arts",
    "Colour": "blue",
    "Active": true
  },
  "Social": {
    "Key": "Social",
    "Title": "Social",
    "Icon": "t-social",
    "Colour": "yellow",
    "Active": true
  }
};

var sorted = Object.keys(obj) // ["Music", "The Arts", "Social"]
  .sort(function(a, b) {
    return obj[b].Active - obj[a].Active; // Organize the category array
  })
  .map(function(category) {
    return obj[category]; // Convert array of categories to array of objects
  });

答案 1 :(得分:0)

对象中的顺序概念不存在,但您可以通过将元素转换为数组,对其进行排序以及从中创建新对象来可视化地对条目进行随机播放。

您可以使用Array#sort从嵌套值中进行排序,并将其传递给函数。

let arr = Object.entries(obj).sort(([key1, val1], [key2, val2]) => val2.Active)

arrayToObject = array => {
  let newObj = {}
  array.forEach(([key, val]) => {
    newObj[key] = val
  })
  return newObj
}

console.log(arrayToObject(arr))

// { Social: 
//   { Key: 'Social',
//     Title: 'Social',
//     Icon: 't-social',
//     Colour: 'yellow',
//     Active: true },
//   Music: 
//   { Key: 'Music',
//     Title: 'Music',
//     Icon: 't-music',
//     Colour: 'blue',
//     Active: false },
//   'The Arts': 
//   { Key: 'The Arts',
//     Title: 'The Arts',
//     Icon: 't-arts',
//     Colour: 'blue',
//     Active: false } }

答案 2 :(得分:0)

谢谢大家,

我不确定对象是否可以分类但是从不会伤到问题。

Borja的回答对我有用,但只有一次我使用Thomas' ' obj [b] .Active - obj [a] .Active'代替'!obj [a] .Active&& OBJ并[b]。主动'

我刚刚看到安德鲁的回应,并会对此进行测试。