如何在React中对来自对象的“类别”数据进行排序

时间:2018-11-06 15:58:16

标签: javascript reactjs sorting object

我是新来的,所以我希望我能正确地做所有事情,并且对您来说可以理解。

我有这样的对象

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 === 1general === 2。 我有主意,但我不知道从哪里开始,这似乎是一个糟糕的解决方案,它为对象中的每个项目都向对象添加了另一个值。

谢谢您的建议,如果您还有其他问题,或者我做错了什么,我错过了一些信息,等等。

我试图检查相关问题,但没有任何帮助。谢谢您的帮助。

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"

尝试类似的东西!

尝试气泡,选择或插入排序算法!