Макс элемент в массиве в dailogflow - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь вычислить максимальный элемент в массиве. Я попробовал этот код, но он возвращает [объект объекта] Есть ли что-то, что я пропускаю при выполнении в dailogflow.

function studentgroup(agent){
    let games = [
    { id: 1, name: 'Star Wars: Imperial Assault',  votes: 3},
    { id: 2, name: 'Game of Thrones: Second Edition', votes: 4 },
    { id: 3, name: 'Merchans and Marauders',  votes: 5 },
    { id: 4, name: 'Eclipse',  votes: 6 },
    { id: 5, name: 'Fure of Dracula', votes: 2 }
];
    let maxGame = games.reduce((max, game) => max.votes > game.votes ? max : game);
    agent.add(`${maxGame}`);
    
  }

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Проблема в том, что maxGame является объектом. Используя ваш пример, этот объект будет

{ id: 4, name: 'Eclipse',  votes: 6 }

Но agent.add() ожидает отправки строки. Как вы видели, «строковой» формой объекта по умолчанию является «[Object Object]».

Возможно, вы захотите вернуть что-то, что имеет больше смысла при отображении или чтении вслух, так что это может сделать больше смысл в том, чтобы эта строка была чем-то вроде

agent.add(`The winner, with ${maxElement.votes} votes, is ${maxElement.name}.`)

, что, на примере, скажет что-то вроде

Победитель с 6 голосами - Eclipse.

0 голосов
/ 04 апреля 2020

Вы можете просто найти максимальный элемент, перебирая массив.

 let games = [
    { id: 1, name: 'Star Wars: Imperial Assault',  votes: 3},
    { id: 2, name: 'Game of Thrones: Second Edition', votes: 4 },
    { id: 3, name: 'Merchans and Marauders',  votes: 5 },
    { id: 4, name: 'Eclipse',  votes: 6 },
    { id: 5, name: 'Fure of Dracula', votes: 2 }
];

maxElement = -Infinity;
element = null

for (const game of games) {
  if (game.votes > maxElement) {
    maxElement = game.votes;
    element = game;
  }
}

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