Фильтровать и сортировать массив строк по длине? - PullRequest
0 голосов
/ 07 сентября 2018

например, у меня есть массив:

let arr=["a","bc","de","fgh","i","jkl"];

Я хочу:

  1. выбрать все строки, длина которых> = 2
  2. и затем сортируйте его до самой длинной строки, мой желаемый результат

    [ "FGH", "JK", "BC", "де"]

Я пытался:

let arr=["a","bc","de","fgh","i","jkl"];
let newArr=[];
for(let s of arr){
  if(s.length>=2){
    newArr.push(s);
  }
}
newArr.sort(function(a,b){
  return a.length<b.length;
});
//newArr should become ["fgh","jk","bc","de"] now

, который имеет много строк кодов. Есть ли алгоритм, который выглядит так:

let arr=["a","bc","de","fgh","i","jkl"];
let newArr=[];
for(let s of arr){
  if(s.length>=2){
    //push it in to a suitable position
  }
}
//newArr should become ["fgh","jk","bc","de"] now

какой newArr естественным образом становится отсортированным массивом? Как мне написать «толкнуть в нужное положение»?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете использовать Array#filter вместо ручной фильтрации с помощью цикла for..of.

Кроме того, в случае Array#sort функция сравнения ожидает, что числа не являются логическими. Таким образом, возвращаемое значение должно быть b.length - a.length вместо a.length < b.length.

Вот как бы я написал для него код:

let arr=["a","bc","de","fgh","i","jkl"];

var resultArray = arr.filter(function(t) {
  return t.length >= 2;
}).sort(function(a, b) {
  return b.length - a.length;
});

console.log(resultArray);

//newArr should become ["fgh","jk","bc","de"] now
0 голосов
/ 07 сентября 2018

Вы можете использовать filter(), чтобы взять предмет, длина которого больше или равна 2:

.filter(i => i.length >= 2);

let arr=["a","bc","de","fgh","i","jkl"];
let newArr = arr.filter(i => i.length >= 2).sort((a,b) => a.length < b.length);
console.log(newArr);
0 голосов
/ 07 сентября 2018

Вы можете использовать .filter() и .sort():

let arr = ["a","bc","de","fgh","i","jkl"];

let result = arr.filter(({ length }) => (length >= 2))
                .sort((s1, s2) => s2.length - s1.length);

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