我试图获取所选值的索引,以显示所有更深层次的选项。
我的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结构更好?
也许我用的结构太复杂了?!
发布于 2019-09-18 07:00:58
每个数组项都是一个具有要搜索的键的对象。使用当前结构,首先将每个数组项映射到其键:
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"
],
...发布于 2019-09-18 07:03:43
正如所评论的,这应该就足够了。
flow‘flow’..findindex((类别) => 'Openingstijden‘in obj)
您的方法的问题是,您试图获取数组的键,而不是对象。
样本:
var 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?"
]
}
]
}
}
var index = flow['flow']['categories'].findIndex((category) => 'Openingstijden' in category);
console.log(index)
发布于 2019-09-18 07:14:22
假设将包含flow对象的对象赋值给一个data变量:
let data = {
"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?"
]
}
]
}
}
for (let i of data.flow.categories) {
for (let j in i) {
if (j === "Openingstijden") {
console.log("index is: " + j);
}
}
}我应该注意,如果对象包含函数等,使用in来迭代对象是有点棘手的。在这种情况下,没有理由不使用。
https://stackoverflow.com/questions/57986760
复制相似问题