AlexLearne Ответов: 2

Получить n самых длинных строк из массива


Мне дан массив строк и n, который указывает, сколько самых длинных строк должно быть возвращено. Я имею в виду вот что
longStr(["a", "ab", "abc", "abcd", "abcde"], 2)-> 'abcde abcd'

Таким образом, если n равно n, он должен возвращать только 1 строку, которая является самой длинной в массиве, если n равно 2, он должен возвращать самую длинную строку и ту, которая является второй по длине.

Что я уже пробовал:

function longest (n,v) {
  var val = ""
for(var i = 0; i < n.length; i++){
  var length = n[0].length;
  if(n[i].length > length){val = n[i] + " " +n[i]; delete n[i]}
}
return val
}

console.log(longest( ["a", "ab", "abc", "abcd", "abcde"], 2));


Я пытался найти самую длинную строку, а затем удалить ее, а затем повторить еще раз и добавить, но застрял. Не лучше ли здесь использовать рекурсию?

Afzaal Ahmad Zeeshan

Это вопрос где-то из кодовых боев? Раньше они показывали такие вопросы, совершенно бессмысленные.

2 Ответов

Рейтинг:
8

Patrice T

пробовать:

function longest (n,v) {
  var val = n[0];
  var length = n[0].length;
  for(var i = 1; i < n.length; i++){
    if(n[i].length > length){
      val = n[i];
      length = n[i].length;
    }
  }
  return val
}


Рейтинг:
12

Karthik_Mahalingam

попробовать это

function longStr(array, max)
        {
            var result = '';
            array.sort(function (a, b) { return b.length - a.length; }); // sort by length (descending)
            max = max >= array.length ? array.length : max; // validate for the max count less than array length 
            for (var i = 0; i < max; i++) {
                result += array[i] + ' ';
            }
            return result;             
        }

        longStr(["a", "ab", "abc", "abcd", "abcde"], 2);


относиться Массив.прототип.сортировать() - JavaScript-кода | МДН[^]

демонстрация:- JSFiddle[^]

Обновленное решение на основе комментариев от Ричард Диминг

function longStr(array, max)
       {
           var result = '';
           array.sort(function (a, b) { return b.length - a.length; }); // sort by length (descending)
           max = max >= array.length ? array.length : max; // validate for the max count less than array length
          return array.slice(0, max).join(' '); 
       }


Richard Deeming

Это может быть проще в использовании ломтик[^] чтобы извлечь первый n элементы массива.

return array.slice(0, max);

Karthik_Mahalingam

да, правильно, но ОП нуждается в ответе в этом формате 'abcde abcd'
любые способы, которыми он может настроить его.

обновил решение.

Maciej Los

Хороший улов!

Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей

AlexLearne

Спасибо Вам за ваш ответ, также комментарии в коде очень помогают. Очень хорошее объяснение!

Karthik_Mahalingam

добро пожаловать:)