Как отсортировать данные категории по объектам в React - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок здесь, поэтому я надеюсь, что я сделаю все правильно и понятно для вас.

У меня есть такой объект:

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. Это хорошо, но теперь я хотел бы иметь сортировку, как я лично хочу, это означает, что когда я нажимаю на какую-то кнопку для сортировки ранга, я хотел бы иметь на 1) позицию фельдмаршала, 2) генерала 3) капитана 4 ) ...

Я понимаю, что мне нужно как-то назначить новое значение, например marshal === 1, general === 2. У меня есть идея, но я не знаю, с чего начать, и, похоже, плохое решение добавляет некоторые другие значения для объекта для каждого элемента из объекта.

Спасибо за совет, если у вас есть еще вопросы или я что-то не так сделал, я пропустил некоторую информацию и т.д., дайте мне знать.

Я пытался проверить связанные вопросы, но ничего мне не помогло. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете поместить ранги в массив в том порядке, в котором вы хотите их видеть, а затем проверять индекс 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);
0 голосов
/ 06 ноября 2018

попробуйте взять объект и сделать его равным вашему новому значению! из которого вы будете сравнивать.

commandersArray.2.rank === "General"

попробуй что-нибудь подобное!

Попробуйте алгоритм сортировки пузырьком, выделением или вставкой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...