使用像 'includes' 这样的通配符从 module.exports 对象数组中检索值
Retrieving value from a module.exports array of objects, using wildcard like 'includes'
嗨,我有一个模块导出。
module.exports = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3',
};
并使用 'require' 将包含此文件的文件导入到名为 tries 的 var 中。然后我使用下面的代码来搜索 module.exports。例如,如果 searchQuery 是 "computer screen" 那么它将 return 'phrase1'.
var tryThis = tries[searchQuery];
我的问题是如何修改它以便它搜索包含搜索查询的任何行。例如搜索 'table' 将 return 'phrase2'。
请帮忙 :) 先谢谢了。
您要导出的是一个具有属性的对象。您可以使用 for-in
循环(包括对象的所有可枚举属性,包括自己的属性和继承的属性)或使用 Object.keys
中的数组(其中仅包括自己的可枚举属性)。那么你可以在每个 属性 名称上使用 includes
。
对于您的具体示例,您可能会使用 Object.entries
代替(最近,但很容易填充),因为您可能需要该值;它 returns 一个 [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
.
来完成
const search = (exports, word) => (Object.entries(exports).find(([name, value]) => name.toLowerCase().includes(word.toLowerCase())) || [])[1]
const module = {}
module.exports = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3'
};
console.log(search(module.exports, "table"))
console.log(search(module.exports, "fffff"))
嗨,我有一个模块导出。
module.exports = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3',
};
并使用 'require' 将包含此文件的文件导入到名为 tries 的 var 中。然后我使用下面的代码来搜索 module.exports。例如,如果 searchQuery 是 "computer screen" 那么它将 return 'phrase1'.
var tryThis = tries[searchQuery];
我的问题是如何修改它以便它搜索包含搜索查询的任何行。例如搜索 'table' 将 return 'phrase2'。
请帮忙 :) 先谢谢了。
您要导出的是一个具有属性的对象。您可以使用 for-in
循环(包括对象的所有可枚举属性,包括自己的属性和继承的属性)或使用 Object.keys
中的数组(其中仅包括自己的可枚举属性)。那么你可以在每个 属性 名称上使用 includes
。
对于您的具体示例,您可能会使用 Object.entries
代替(最近,但很容易填充),因为您可能需要该值;它 returns 一个 [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
.
const search = (exports, word) => (Object.entries(exports).find(([name, value]) => name.toLowerCase().includes(word.toLowerCase())) || [])[1]
const module = {}
module.exports = {
"Computer screen": 'phrase1',
"Table height": 'phrase2',
"Temperature": 'phrase3'
};
console.log(search(module.exports, "table"))
console.log(search(module.exports, "fffff"))