javascript - 如何在 JSON 中查找对象键的索引
问题描述
我尝试获取所选值的索引以显示所有更深层次的选项。
我的JSON
样子是这样的:
{
"flow": {
"startmessage": "Hallo [name]",
"questionmessage": "Waar heb je een vraag over?",
"categories": [
{
"Openingstijden": [
{"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
"Hoe upload ik een audio file?",
"Hoe stel ik een doorschakeling in?",
"Hoe stel ik een pauze in?"
]
},
{
"Mijn bedrijfsgegevens": [
"Hoe wijzig ik mijn bedrijfsgegevens?",
"Hoe maak ik een nieuwe gebruiker aan?",
"Mijn bedrijfsgegevens kloppen niet"
]
},
{
"Mijn facturen": [
"Hoe kan ik mijn facturen inzien?",
"Ik heb geen factuur ontvangen",
"Het bedrag op mijn factuur klopt niet!"
]
},
{
"Mijn project": [
"Hoe kan ik mijn projectstatus inzien?",
"Waar kan ik mijn project terugvinden?",
"Waarom moet ik een inventarisatiefomulier invullen?"
]
},
{
"Mijn contract": [
"Waar kan ik mijn contract terugvinden?",
"De gegevens van mijn contract kloppen niet"
]
},
{
"CDR's": [
"Hoe exporteer ik mijn CDR's?",
"Waarom werken mijn CDR's niet?",
"Hoe filter ik mijn CDR's?"
]
}
]
}
}
我试图这样做以获得“Openingstijden”的索引。
flow
是JSON
我给的对象的名称。
var index = flow['flow']['categories'].findIndex(function(category) {
return category == "Openingstijden";
});
我也试过这个:
var index = Object.keys(flow['flow']['categories']).indexOf("Openingstijden");
然而这总是返回-1,所以它说它找不到它。
有谁知道如何找到索引以及如何使我的JSON
结构更好?
也许我使用的结构太复杂了?!
解决方案
每个数组项都是一个带有您要搜索的键的对象。使用您当前的结构,首先将每个数组项映射到其键:
const flow={flow:{startmessage:"Hallo [name]",questionmessage:"Waar heb je een vraag over?",categories:[{Openingstijden:[{"Hoe pas ik mijn openingstijden aan?":["text 2"]},"Hoe upload ik een audio file?","Hoe stel ik een doorschakeling in?","Hoe stel ik een pauze in?"]},{"Mijn bedrijfsgegevens":["Hoe wijzig ik mijn bedrijfsgegevens?","Hoe maak ik een nieuwe gebruiker aan?","Mijn bedrijfsgegevens kloppen niet"]},{"Mijn facturen":["Hoe kan ik mijn facturen inzien?","Ik heb geen factuur ontvangen","Het bedrag op mijn factuur klopt niet!"]},{"Mijn project":["Hoe kan ik mijn projectstatus inzien?","Waar kan ik mijn project terugvinden?","Waarom moet ik een inventarisatiefomulier invullen?"]},{"Mijn contract":["Waar kan ik mijn contract terugvinden?","De gegevens van mijn contract kloppen niet"]},{"CDR's":["Hoe exporteer ik mijn CDR's?","Waarom werken mijn CDR's niet?","Hoe filter ik mijn CDR's?"]}]}};
const keys = flow['flow']['categories'].map(arr => Object.keys(arr)[0]);
const index = keys.indexOf("Openingstijden");
console.log(index);
拥有只有一个属性的对象是很奇怪的,但是,您可能会考虑拥有categories
一个对象数组,其中一个键是唯一的字符串(例如,Openingstijden
),另一个键是数组,例如:
{
label: "Openingstijden",
arr: [
{"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
"Hoe upload ik een audio file?",
"Hoe stel ik een doorschakeling in?",
"Hoe stel ik een pauze in?"
]
}
然后,您可以查找该label
属性。
如果您经常想通过标签查找对象,则不要使用类别数组,而是使用对象,其中每个键都是标签,例如:
const flow = {
"flow": {
"startmessage": "Hallo [name]",
"questionmessage": "Waar heb je een vraag over?",
"categories": {
"Openingstijden": [
{"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
"Hoe upload ik een audio file?",
"Hoe stel ik een doorschakeling in?",
"Hoe stel ik een pauze in?"
]
},
"Mijn bedrijfsgegevens": [
"Hoe wijzig ik mijn bedrijfsgegevens?",
"Hoe maak ik een nieuwe gebruiker aan?",
"Mijn bedrijfsgegevens kloppen niet"
],
...
推荐阅读
- swagger-editor - Swagger Editor 如何为每个标签设置一个 basePath?
- c# - 如何设置 Ray Casted 变换的父级?
- css - 使用媒体查询;Chrome 不会在调整窗口大小时调整 CSS 网格,Firefox 工作得很好。这是一个已知问题吗?
- javascript - 重新排列对象数组,以便将回复添加到特定父级
- user-interface - 任何 PuTTY 前端都看不到那个 GUI 了吗?
- xml - 如何从xml中的值中删除“<”
- c# - 我的 C# 控制台应用程序未运行正确的计算
- excel - MS Office 宏白名单
- java - 尝试使用 customexception 处理 firebaseauth
- postgresql - 在 PostgreSQL 中使用非结构化数据在 JSONB 列中搜索