Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как правильно отсортировать свойства с удалением дубликатов (native js)? (https://javascript.ru/forum/dom-window/76571-kak-pravilno-otsortirovat-svojjstva-s-udaleniem-dublikatov-native-js.html)

s24344 23.01.2019 13:00

Как правильно отсортировать свойства с удалением дубликатов (native js)?
 
Здравствуйте. Подскажите, пожалуйста, как правильно решить следующую задачу. У меня есть следующий массив.
const arr = [
    { id: 1, name: 'Alexey', country: 'Moscow' },
    { id: 2, name: 'Mikhail', country: 'Tula' },
    { id: 3, name: 'Vladimir', country: 'Moscow' },
    { id: 4, name: 'Andrey', country: 'Vladivostok' },
    { id: 5, name: 'Andrey', country: 'Moscow' },
    { id: 6, name: 'Peter', country: 'Vladivostok' },
    { id: 7, name: 'Sergey', country: 'Tula' }
]

Мне необходимо отсортировать его следующим образом:
const arr = [
    { id: 1, country: 'Moscow' },
    { id: 2, country: 'Tula' },
    { id: 3, country: 'Vladivostok' }
]

рони 23.01.2019 13:51

s24344,
однотипные вопросы пишите в одной теме ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
</head>

<body>
<ul class="list"></ul>
 <script>
function fn(arr) {
    let obj = arr.reduce(function(obj, {country}) {
        obj[country] = (obj[country]||0) + 1;
        return obj;
        }, {});
    return Object.keys(obj).sort((a,b) => obj[b] - obj[a] ||( a > b ? 1 : -1)).map((country, i)=>({id : ++i, country}))
};

const arr = [
    { id: 1, name: 'Alexey', country: 'Moscow' },
    { id: 2, name: 'Mikhail', country: 'Tula' },
    { id: 3, name: 'Vladimir', country: 'Moscow' },
    { id: 4, name: 'Andrey', country: 'Vladivostok' },
    { id: 5, name: 'Andrey', country: 'Moscow' },
    { id: 6, name: 'Peter', country: 'Vladivostok' },
    { id: 7, name: 'Sergey', country: 'Tula' }
]

,
arrFilter = fn(arr),
html = arrFilter.reduce(function(html, el) {
 return html +=  '<li class="item" ><div>' + el.id + ' ' +el.country+'</div></li>'
},"");
document.querySelector(".list").innerHTML = html;
</script>

</body>
</html>

s24344 23.01.2019 16:46

Большое спасибо за помощь.


Часовой пояс GMT +3, время: 01:46.