嗨,我有一个这样的模块导出。
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
调用中),但这并不能让您满意任何东西(当你找到你要找的东西时你就无法停止)。类似地,可以使用 map
和 filter
来完成。
关于javascript - 使用通配符(如 'includes')从 module.exports 对象数组中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119822/