2017-10-16 117 views
2

我想查找是否有方法使用bool值对对象内的对象进行排序。我一直无法找到任何帮助,甚至没有可能。JS - 排序对象中的子对象

我的目标例子是这样的:

{ 
"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 
} 

}

反正是有根据的“活动”布尔父对象中的这些对象进行排序?

+2

对象没有顺序 – epascarello

+0

你可以使用'Object.keys(yourObj).sort(...)'来获得最终的命令以显示更好的键 – Thomas

回答

1

尽管对象没有排序顺序,但您可以根据Active布尔值组织这些对象。使用.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

'obj [b] .Active - obj [a ] .Active',因为它处理的情况下,'obj [b] .Active === obj [a] .Active' – Thomas

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 } } 
0

谢谢你们,

我不知道,如果对象可以进行排序,但从来没有伤害要求。

博尔哈的回答为我工作,但只有一次,我用托马斯OBJ [B]。主动 - OBJ [A]。主动'!代替” OBJ [A]。主动& & OBJ [B]。活性'。

我只看到了安德鲁的回应,并且也会对此进行测试。