javascript - 有没有办法可以搜索两个 JSON 文件?
问题描述
目前,我正在研究一个搜索两个不同 JSON 文件的项目。现在,我有:
var search = message.content
.split(/\s+/g)
.slice(1)
.join(' ');
if (!search) return message.reply('Please give a character name!');
var waifuobj = waifusearch; //My JSON file
var husbandoobj = husbandosearch; //My other JSON file
let WName = Object.values(waifuobj.waifuID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).names;
let HName = Object.values(husbandoobj.husbandoID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).names;
let WImg = Object.values(waifuobj.waifuID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).img_url;
let HImg = Object.values(husbandoobj.husbandoID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).img_url;
let WClaim = Object.values(waifuobj.waifuID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).claims;
let HClaim = Object.values(husbandoobj.husbandoID).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
).claims;
let embed = new MessageEmbed()
.setTitle(`${WName}`)
.setDescription(`Claims: ${WClaim}`)
.setImage(`${WImg}`)
.setColor('#f095d1')
.setFooter(
`Powered by: Twintails API `,
`https://64.media.tumblr.com/1a1c3bcc08b5a048b90139a56fe7f415/tumblr_o9ku1rVS8z1vnqjx7o2_250.png`
);
message.channel.send(embed);
我想要它,以便它搜索两个 JSON 文件。此代码现在搜索 waifusearch JSON 并找到所有 waifu 名称、img_url 和声明。我想要它,所以如果一个人搜索一个 hubo 名字,它会通过 hubosearch JSON 文件而不是 waifusearch 文件来查找。
waifuID 和 huboID 的示例:
解决方案
您可以将两个对象放在一个数组中,然后使用该Array.prototype.find()
函数。
// array of both objects
var data = [waifuobj, husbandoobj];
// try this:
const { names, claims, img_url } = Object.values(
Object.values(
data.find((obj) =>
Object.values(Object.values(obj)[0]).find(
(value) => value.names.toLowerCase() === search.toLowerCase()
)
)
)[0]
)[0];
Array.prototype.reduce()
编辑:我发现了一种使用该功能的更紧凑的方式。
const data = [waifuobj, husbandoobj];
const { names, claims, img_url } = data
.reduce((a, v) => a.concat(Object.values(Object.values(v)).flat()), [])
.find(({ names }) => names.toLowerCase() === search.toLowerCase());
推荐阅读
- r - ggplot 使用交互和分组
- html - 将所有面板宽度设置为最宽面板的宽度
- python - 无头网络驱动程序返回错误但非无头工作
- xamarin.android - 从 Xamarin 导出的手动 ziplalign-ing android unsigned APK
- python - BeautifulSoup find_all 不总是工作
- javascript - 使用 Excel Javascript API 通过 ASP.Net 站点写入 Excel 电子表格
- sql - Oracle 到 Postgres 转换正则表达式概念
- java - 将一个添加到数组 Java 中的一组数字中
- kotlin - kotlin + aws lambda 需要空构造函数
- sql - SQL Server 2012 中的条件存储过程