使用像 '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 调用中),但它不会给您带来任何好处(而且您当你找到你要找的东西时就停不下来了)。同样可以用 mapfilter.

来完成

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"))