Как отсортировать массив от объекта?

Как отсортировать массив от объекта? Код :

         let A = [ { text: '故事', value: 'story', },
                   { text: '诗歌', value: 'poetry', },
                   { text: '励志', value: 'inspirational', }
                 ];
         // array B from backend** 
         let B = { 
                   story: 2,
                   poetry: 34,
                   inspirational: 30,
                 };

Я хочу получить вот это:

             [ 
               { text: '诗歌', value: 'poetry', },
               { text: '励志', value: 'inspirational'},
               { text: '故事', value: 'story', }, 
             ];

Итак, вы пытаетесь отсортировать от наибольшего к наименьшему на основе значения свойства объекта, который вы получаете?

Andrew Li 26.07.2018 05:11
A.sort((a, b) => B[b.value] - B[a.value]) для самых маленьких
Andrew Li 26.07.2018 05:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
2
75
5

Ответы 5

Просто вы можете использовать функцию JavaScript Сортировать.

Примечание: При сортировке чисел вы можете просто использовать компактное сравнение:

Compact Comparison:: myArray.sort((n1,n2) => n1 - n2);

let A = [ { text: '故事', value: 'story', },
                   { text: '诗歌', value: 'poetry', },
                   { text: '励志', value: 'inspirational', }
                 ];
         // array B from backend** 
         let B = { 
                   story: 2,
                   poetry: 34,
                   inspirational: 30,
                 };
 A.sort((a, b) => B[b.value]-B[a.value] );
                 console.info(A);

Вы можете использовать стрелочную функцию в array.sort в качестве настраиваемого компаратора. Сортировка в обратном порядке выполняется путем индексации объекта B для извлечения значения сортировки для сравниваемых элементов и вычитания значения a из b.

let A = [ 
  { text: '故事', value: 'story', },
  { text: '诗歌', value: 'poetry', },
  { text: '励志', value: 'inspirational', }
];
let B = { 
  story: 2,
  poetry: 34,
  inspirational: 30,
};

const sorted = A.sort((a, b) => B[b.value] - B[a.value]);

console.info(sorted);

Вы можете использовать sort() для упорядочивания элементов массива. Вы можете использовать Number.NEGATIVE_INFINITY как значение по умолчанию, если value не существует на B. Это оставит неопределенное значение последним.

let A = [{"text":"诗歌","value":"poetry"},{"text":"励志","value":"inspirational"},{"text":"故事","value":"story"}];
let B = {"story":2,"poetry":34,"inspirational":30};

A.sort((x, y) => (B[y.value] || Number.NEGATIVE_INFINITY) - (B[x.value] || Number.NEGATIVE_INFINITY));

console.info(A);

Попробуйте это, он использует функцию стрелки и array.sort:

let A = [{
    text: '故事',
    value: 'story',
  },
  {
    text: '诗歌',
    value: 'poetry',
  },
  {
    text: '励志',
    value: 'inspirational',
  }
];
// array B from backend** 
let B = {
  story: 2,
  poetry: 34,
  inspirational: 30,
};
A.sort((a, b) => B[b.value] - B[a.value]);
console.info(A);

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

Этот B[bV] - B[aV] вернет значение меньше, чем 0, или больше, чем 0, или равное 0, что и ожидает функция sort, чтобы найти элементы по определенному индексу в соответствии с их значением из объекта B.

let A = [{    text: '故事',    value: 'story',  },  {    text: '诗歌',  value: 'poetry',  },  {    text: '励志',    value: 'inspirational',  }],
    B = {  story: 2,  poetry: 34,  inspirational: 30};
A.sort(({value: aV}, {value: bV}) => B[bV] - B[aV]);

console.info(A);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Другие вопросы по теме