javascript - Array.splice() 产生值“未定义”
问题描述
目前,我正在研究应该从列表中删除用户选择的选项的代码。当我使用该.splice()
方法时,它会产生 value 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?`)
})
我的预期结果是该函数返回一个没有用户选择选项的数组。此时,该值为“未定义”并破坏代码。
解决方案
我不得不硬编码一些值并删除您的值,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);
});
推荐阅读
- c - 如何通过 esp32 ap 模式连接互联网
- c# - 在 C# 中将 Base64 内容嵌入到 HTML 中
- java - 从 maven-jaxb2-plugin 0.14.0 迁移到 jaxb2-maven-plugin 2.5.0
- javascript - React 钩子真的必须从“使用”开始吗?
- sql - 根据其他表中的列更新列
- python - 如何在python中获取文件夹的文件描述符
- java - 默认情况下不应该设置构造函数吗?
- pandas - 为什么要在 PySpark 中导入熊猫?
- r - 在森林图中将特定行的字体更改为粗体
- python - 检查 Python 列表是否有 X 个等于 Y 的连续值