сортировка по javascript без нескольких записей - PullRequest
0 голосов
/ 05 мая 2018

Вот мой код

var array1 = [1,1, 30, 4, 21];
array1.sort();
console.log(array1);
// expected output: Array [1, 21, 30, 4]

Я хочу получить результат [1,4,21,30]. функция сортировки должна была дать ожидаемый результат [1,1,4,21,30], который она не дает. Кроме того, какие подходы я должен использовать, чтобы оставить один «1»? как я не хочу дублирования

enter image description here

Ответы [ 5 ]

0 голосов
/ 05 мая 2018

После коротких попыток просто попробуйте отфильтровать уникальные значения

var array1 = [1,1, 30, 4, 21];
array1.sort(function(a, b){return a-b});
var uniqueValues = [];


 $.each(array1, function(i, el){
        if($.inArray(el, uniqueValues) === -1) uniqueValues.push(el);
    });

console.log(uniqueValues);

Результат здесь:

0 голосов
/ 05 мая 2018

ES6

Вы также можете использовать new Set([]) и Spread_syntax, чтобы получить требуемый результат.

DEMO

let arr= [1,1, 30, 4, 21];

arr = arr.sort((a,b)=>a-b);

console.log([...new Set(arr)])
.as-console-wrapper {max-height: 100% !important;top: 0;}
0 голосов
/ 05 мая 2018

Вы можете использовать sort и filter одновременно. Первое использование sort с условием a>b даст вам массив с возрастающими значениями с дубликатами, а использование filter удалит дубликаты из отсортированного массива.

var array1 = [1,1, 30, 4, 21];
function sort_unique(arr) {
    return arr.sort((a, b) => a>b).filter((el,i,a) => i==a.indexOf(el));
}
var res = sort_unique(array1);
console.log(res);

Рекомендую использовать indexOf(), так как includes() не работают в IE браузеры

0 голосов
/ 05 мая 2018

Вы можете объединить sort() и reduce(), просто принимая во внимание, что includes не работает в IE, и как вы можете видеть в фрагменте ниже оператора

a.includes(x) ? a : [...a, x]

представляет оператор if, чтобы избавиться от дублированного элемента и вернуть по одному значению каждого элемента

var array1 = [1,1, 30, 4, 21];
var sortedArray1 = array1.reduce((a, x) => a.includes(x) ? a : [...a, x], []).sort()
console.log(sortedArray1);
// expected output: Array [1, 21, 30, 4]
0 голосов
/ 05 мая 2018

После sort вы можете filter ваш массив, чтобы избавиться от дубликатов.

Здесь

var array1 = [1,1, 30, 4, 21];
array1.sort((a, b) => a - b);
var s = array1.filter(function(i, o) {
    return array1.indexOf(i) == o;
});

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