我试图找到是否有办法使用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"在父对象中对这些对象进行排序。布尔?
答案 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]。主动'
我刚刚看到安德鲁的回应,并会对此进行测试。