Array.splice () приводит к значению 'undefined' - PullRequest
0 голосов
/ 01 ноября 2019

В настоящее время я работаю над кодом, который должен удалить выбранную опцию пользователя из списка. Когда я использую метод .splice(), это приводит к значению undefined.

Сначала я думал, что это проблема асинхронности, поэтому я добавил для этого асинхронный код.

app.intent("Optionpicker", (conv, input) => {
  conv.data.list = ['optionA', 'optionB', 'optionC', 'optionD']

  let choice = conv.parameters.choice

  async function listremover() {
    let index = conv.data.list.indexOf(choice);
    if (index > -1) {
      conv.data.list = conv.data.list.splice(index, 1);

      return conv.data.list
    }
  }
  listremover().then()

  conv.add(`Ok, your choice is ${choice}. The remaining options are: ${conv.data.list[0]}, ${conv.data.list[1]} and ${conv.data.list[2]}. Which one is next?`)
})

Мой ожидаемый результат - функция возвращает массив без выбранной опции пользователя. В данный момент значение равно «undefined» и перебивает код.

1 Ответ

0 голосов
/ 01 ноября 2019

Мне пришлось жестко закодировать несколько значений и удалить ваш app.intent("Optionpicker", (conv, input) => {, потому что app, conv и input в этом примере не определены.

let conv = {};
//let choice = 2; // conv.parameters.choice;
// had to hard code values b/c app and conv are undefined in this example
conv.data = {};
conv.data.list = ['optionA', 'optionB', 'optionC', 'optionD'];
let selected = {};

async function listremover() {
  let index = conv.data.list.indexOf('optionB');
  //if (index > -1) {
  //conv.data.list = conv.data.list.splice(index, 1);
  //return conv.data.list;
  //}

  if (index > -1) {
    selected = conv.data.list.splice(index, 1);
    //return selected; // returns selected array
  }
  return conv.data.list; // returns remaining values of original array
}

listremover().then(function(res) {
  // removed `conv.add()` not sure where this is defined...
  //console.log(`Ok, your choice is ${selected}. The remaining options are: ${conv.data.list[0]}, ${conv.data.list[1]} and ${conv.data.list[2]}. Which one is next?`);
  console.log(res);
});
...