найти длину трех слов - PullRequest
       2

найти длину трех слов

1 голос
/ 03 августа 2020

У меня есть функция с тремя словами, я хочу вернуть минимальную длину этих трех слов. Я решил с помощью метода Math.min(), но я попытался решить его с помощью reduce(), но это не сработало. это мой код

    const words = (w1, w2, w3) => {
      return Math.min(w1.length, w2.length, w3.length)
    }

 let output = words('hi', 'hello', 'good') 
 console.log(output) // --> 2   

, поэтому я пытаюсь заставить его работать с reduce это то, что я пробовал с reduce

const words = (w1, w2, w3) => {
 let ar = [w1, w2, w3]
 ar.reduce((a,i) => i.length < a.length ? i.length : a.length)
}

Любая помощь была бы очень признательна.

Ответы [ 4 ]

2 голосов
/ 03 августа 2020

Посмотрите пример сокращения в MDN . Аккумулятор - это результат первой итерации. Имея это в виду, измените свой редуктор, чтобы он возвращал меньшую из двух строк.

const words = (w1, w2, w3) => {
    let ar = [w1, w2, w3];
    const reducer = (a, i) => a.length < i.length ? a : i;
    return ar.reduce(reducer).length;
}

const output = words('hi', 'hello', 'good');
console.log(output) // --> 2   

Если вы хотите разместить его в одной строке, это будет выглядеть так:

const words = (w1, w2, w3) => [w1, w2, w3].reduce((a, i) => a.length < i.length ? a : i).length;

const output = words('hi', 'hello', 'good');
console.log(output) // --> 2 
2 голосов
/ 03 августа 2020

Вам нужно вернуть результат после сокращения и вернуть внутри сокращения как

const words = (w1, w2, w3) => {
 let ar = [w1, w2, w3]
 return ar.reduce((a,i) => {
   debugger;
   if(i.length > a) {
     return i.length;
   }else{
     return ar[0].length;
   }
 }, ar[0].length)
}

const words = (w1, w2, w3) => {
 let ar = [w1, w2, w3]
 return ar.reduce((a,i) => {
   debugger;
   if(i.length > a) {
     return i.length;
   }else{
     return ar[0].length;
   }
 }, ar[0].length)
}

let output = words('hi', 'hello', 'good') 
 console.log(output) // --> 2   
1 голос
/ 03 августа 2020

с сокращением, вы можете сделать это так:

const words = (w1,w2,w3) =>  
  [w1,w2,w3].reduce((smallest,word) => word.length < smallest ? word.length : smallest, Infinity)

console.log(words( "hi", "there", "how"))

большое подспорье - это наименование вещей в вашем редуцировании, чтобы вы не принимали вещи за то, чем они не являются (в вашем случае вы ошибочно приняли a за слово, скорее чем число)

0 голосов
/ 03 августа 2020

Ваше решение полностью работает? Большое спасибо @Hien Nguyen

const words = (w1, w2, w3) => {
 let ar = [w1, w2, w3]
  return ar.reduce((a, i) => i.length < a ? i.length : ar[0].length)
}

 let output = words('hi', 'hello', 'good') 
 console.log(output) // --> 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...