javascript - 使用通配符(如 'includes')从 module.exports 对象数组中检索值

标签 javascript node.js module alexa-skills-kit aws-sdk-nodejs

嗨,我有一个这样的模块导出。

module.exports = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3',
};

并使用“require”将包含此内容的文件导入到名为 attempts 的 var 中。然后我使用以下代码来搜索 module.exports。例如,如果 searchQuery 是“计算机屏幕”,那么它将返回“phrase1”。

var tryThis = tries[searchQuery];

我的问题是如何修改它,以便它搜索包含搜索查询的任何行。例如,搜索“table”将返回“phrase2”。

请帮忙:)先谢谢了。

最佳答案

您要导出的是具有属性的对象。您可以使用 for-in 循环(其中包括对象上的所有可枚举属性,包括自己的属性和继承的属性)或使用 Object.keys 中的数组来循环访问对象的属性名称 (仅包含自己的可枚举属性)。因此,您可以在每个属性名称上使用 includes

对于您的具体示例,您可以使用 Object.entries (相当新的,但很容易填充),因为您可能需要该值;它返回一个由[key, value]数组组成的数组。

您似乎仅使用 ES5 级别语法,因此:

var tryThis;
Object.entries(tries).some(function(entry) {
    if (entry[0].includes(searchQuery)) {
        tryThis = entry[1];
        return true;
    }
});

...或者entry[0].toLowerCase().includes(searchQueryLower)(其中你有searchQueryLower = searchQuery.toLowerCase())如果你愿意的话不区分大小写的匹配。

实例:

var tries = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3',
};
var searchQuery = "Table";
var searchQueryLower = searchQuery.toLowerCase();

var tryThis;
Object.entries(tries).some(function(entry) {
    if (entry[0].toLowerCase().includes(searchQueryLower)) {
        tryThis = entry[1];
        return true;
    }
});

console.log(tryThis);

在 ES2015+ 中,我会使用 for-of 和解构:

let tryThis;
for (const [key, value] of Object.entries(tries)) {
    if (key.toLowerCase().includes(searchQueryLower)) {
        tryThis = value;
        break;
    }
}

实例:

const tries = {
  "Computer screen": 'phrase1',
  "Table height": 'phrase2',
  "Temperature": 'phrase3',
};
const searchQuery = "Table";
const searchQueryLower = searchQuery.toLowerCase();

let tryThis;
for (const [key, value] of Object.entries(tries)) {
    if (key.toLowerCase().includes(searchQueryLower)) {
        tryThis = value;
        break;
    }
}

console.log(tryThis);

当然,您可以将其放入 reduce 调用中(因为任何数组操作都可以放入 reduce 调用中),但这并不能让您满意任何东西(当你找到你要找的东西时你就无法停止)。类似地,可以使用 mapfilter 来完成。

关于javascript - 使用通配符(如 'includes')从 module.exports 对象数组中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119822/

相关文章:

javascript - Chrome 中的 ES6 模块

javascript - MongoDB填写查询结果中不包含的数据

javascript - 我可以通过 javascript 在 Eloqua 中创建联系人吗?

javascript - 在生产中使用 node.js?

javascript - 使用 ng-click 上传没有表单的图像

javascript - 关于Web应用程序如何工作以及服务器客户端如何实现的问题

Javascript简单MVC+模块模式实现

python - Flask 导入错误 "cannot import name ' Flask'”

javascript - 热门通过 react 获得角色

javascript - 如何在数据到达之前检查 XMLHttpRequest 连接是否已建立