我是新来的,所以我希望我能正确地做所有事情,并且对您来说可以理解。
我有这样的对象
this.state = {
commandersArray: {
1: {
name: "Horattio",
amountOfPlanets: "120",
rank: "Field-Marshal",
equipment: "Strong",
army: "190 123 122"
},
2: {
name: "Tento",
amountOfPlanets: "69",
rank: "General",
equipment: "Medium",
army: "40 123 912"
},
有等级:等级内部有一些军队等级值。 我按字母顺序对名称进行了排序,然后对数量asc和desc进行了排序。很好,但是现在我想按照我个人的意愿进行排序,这意味着,当我单击某个按钮进行RANK排序时,我想在以下位置进行操作:1)陆军元帅,2)一般3)机长4 )...
我了解我需要以某种方式分配新值,例如marshal === 1
,general === 2
。
我有主意,但我不知道从哪里开始,这似乎是一个糟糕的解决方案,它为对象中的每个项目都向对象添加了另一个值。
谢谢您的建议,如果您还有其他问题,或者我做错了什么,我错过了一些信息,等等。
我试图检查相关问题,但没有任何帮助。谢谢您的帮助。
答案 0 :(得分:0)
您可以按照想要的顺序将其放入数组中,然后在进行排序时检查该数组中的对象rank
索引。
示例
const state = {
commandersObject: {
0: {
name: "Foo",
amountOfPlanets: "12",
rank: "Captain",
equipment: "Weak",
army: "123 456 789"
},
1: {
name: "Horattio",
amountOfPlanets: "120",
rank: "Field-Marshal",
equipment: "Strong",
army: "190 123 122"
},
2: {
name: "Tento",
amountOfPlanets: "69",
rank: "General",
equipment: "Medium",
army: "40 123 912"
}
}
};
const rankOrder = ["Field-Marshal", "General", "Captain"];
const commandersArray = Object.keys(state.commandersObject)
.map(key => state.commandersObject[key]);
commandersArray.sort((a, b) =>
rankOrder.indexOf(a.rank) - rankOrder.indexOf(b.rank)
);
console.log(commandersArray);
答案 1 :(得分:-3)
尝试获取该对象并使它等于您的新值!您可以从中进行比较。
commandersArray.2.rank === "General"
尝试类似的东西!
尝试气泡,选择或插入排序算法!