Как отсортировать многомассивную / вложенную карту по значению (например, из Firestore) в JavaScript

#javascript #arrays #sorting

#javascript #массивы #сортировка

Вопрос:

Я пытаюсь получить карту с несколькими массивами / вложениями, отсортированную по значению с помощью JavaScript / TypeScript.

Мой массив в настоящее время выглядит следующим образом:

 let array =
    [
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'C'
        }
      },
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'B'
        }
      },
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'A'
        }
      }
    ];
 

Теперь я хотел бы отсортировать по таким ['information']['name'] значениям:

 let array_sorted =
    [
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'A'
        }
      },
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'B'
        }
      },
      {
        classification: {
          company_id: 1
        },
        information: {
          name: 'C'
        }
      }
    ];
 

Кто-нибудь знает, как это сделать?
Я особенно борюсь с вложенными материалами…

Заранее спасибо!

Ответ №1:

Используя String.prototype.localeCompare , вы можете сравнить строковые значения и на основе этого результата, используя Array.prototype.sort функцию, вы можете отсортировать массивы следующим образом.

 let array = [{
    classification: {
      company_id: 1
    },
    information: {
      name: 'C'
    }
  },
  {
    classification: {
      company_id: 1
    },
    information: {
      name: 'B'
    }
  },
  {
    classification: {
      company_id: 1
    },
    information: {
      name: 'A'
    }
  }
];

const result = array.sort((a, b) => a.information.name.localeCompare(b.information.name));
console.log(result); 

Ответ №2:

Вы можете использовать функцию сортировки. Это будет выглядеть так:

 const array_sorted = array.sort(
  (a, b) => {
    if (a > b.information.name) return -1;
    if (a < b.information.name) return 1;
    return 0;
  }, 0
)
 

Вы можете инвертировать порядок, поменяв местами 1 и -1. Функция сортировки принимает первый параметр функции, которая возвращает -1, 1 или 0, что обозначает порядок, и второй параметр, который задает начальное значение переменной ‘a’ (необязательно). Я установил начальное значение равным 0, именно так мне нравится использовать функцию сортировки, поскольку я думаю, что это упрощает запись 🙂