Javascript уменьшить в функции - PullRequest
0 голосов
/ 29 сентября 2018

Я новичок в javascript, и у меня под пояс только курс начального уровня java.Я беру онлайн курс для изучения JS и столкнулся с ошибкой.Я должен создать функцию, которая анализирует строку и находит самое длинное слово.Я разобрался в проблеме, но не мог понять, почему следующая функция давала мне неопределенное.Любая помощь будет очень полезна, поскольку я пытаюсь глубже понять язык.

var statement = 'This is an example string'
//undefined

var result = statement.split(' ').reduce(function(acc, cur) {
  if (acc.length > cur.length) {
    return acc;
  } else {
    return cur;
  }
});

console.log(result);  //"example"

function longest(string) {
  string.split(' ').reduce(function(acc, cur) {
    if (acc.length > cur.length) {
      return acc;
    } else {
      return cur;
    }
  });
}

result = longest(statement);
console.log(result);  //undefined

Ответы [ 4 ]

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

Вы не возвращаете значение из своей функции.В JavaScript есть специальные типы функций, называемые Arrow Functions, которые позволяют избегать использования оператора return.Это работает только для однострочных операторов.Подробнее о функциях стрелок можно узнать здесь .

Вот как будет выглядеть мое решение:

const statement = 'This is an example string';
const longest = string => 
  string.split(' ').reduce((acc, cur) => acc.length > cur.length? acc: cur);
console.log(longest(statement));
0 голосов
/ 29 сентября 2018

Необходимо добавить возврат из функции.

var statement = 'This is an example string'
//undefined

function longest(string) {
  var result = string.split(' ').reduce(function(acc, cur) {
    if (acc.length > cur.length) {
      return acc;
    } else {
      return cur;
    }
  });
  return result;
}

result = longest(statement);
console.log(result);
0 голосов
/ 29 сентября 2018

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

var statement = 'This is an example string'
var result = statement.split(' ').sort((x,y) => y.length - x.length)[0]

console.log(result)
0 голосов
/ 29 сентября 2018

Ваша функция должна что-то возвращать.Если вы не «вернете» какие-либо значения в JavaScript, он вернет «undefined»

В вашей задаче у вашей функции есть метод Reduce, который возвращает значение внутри вашей «самой длинной» функции.Но самая длинная функция должна возвращать значение.Так что значение будет доступно при вызове этой функции

function longest(string){ 
   return string.split('').reduce(function(acc,cur){
       if (acc.length > cur.length){
          return acc;
       } else { 
          return cur; 
       } 
   }); 
 }
...