Javascript 如何获取对象中的数组值?
我有一个这样的物体:Javascript 如何获取对象中的数组值?,javascript,parsing,Javascript,Parsing,我有一个这样的物体: var routes = { 'fr-FR': [ '/accueil', '/offre', '/specifications' ], 'en-US': [ '/home', '/offer', '/specifications-en' ], 'de-DE': [ '/startseite', '/annbod', '/specificaties' ] }; 我的目标是根据u
var routes = {
'fr-FR': [
'/accueil',
'/offre',
'/specifications'
],
'en-US': [
'/home',
'/offer',
'/specifications-en'
],
'de-DE': [
'/startseite',
'/annbod',
'/specificaties'
]
};
我的目标是根据url获取区域设置
我尝试了如下内容:(url=/offer
)
我得到的结果是:
getLocale for /offer
lg = fr-FR
rt = 0
lg = fr-FR
rt = 1
lg = fr-FR
rt = 2
lg = fr-FR
rt = 3
lg = fr-FR
rt = 4
lg = en-US
rt = 0
lg = en-US
rt = 1
lg = en-US
rt = 2
lg = en-US
rt = 3
lg = en-US
rt = 4
lg = de-DE
rt = 0
lg = de-DE
rt = 1
lg = de-DE
rt = 2
lg = de-DE
rt = 3
lg = de-DE
rt = 4
所以我想我在第一个for-in循环中做得很好,但是我不知道如何在数组中循环,而不是它的名称的字符
此外,我在许多帖子上读到,for in循环在某些情况下不是最好的循环方式,但哪种方式是最好的
提前感谢。循环的第一部分是正确的,但请注意:
语言是字符串(“fr-fr”、“en-US”等),而不是您要查找的数组
相反,您可以通过如下方式访问routes[language]
来访问路由:
for (var language in routes) {
var routeByLanguage = routes[language];
for (var i = 0, len = routeByLanguage.length; i < len; i++) {
console.log('lg = ' + language);
console.log('rt = ' + routeByLanguage[i]);
if (routeByLanguage[i] === url) {
return routeByLanguage[i];
}
}
}
for(路由中的var语言){
var routeByLanguage=路由[语言];
for(变量i=0,len=routeByLanguage.length;i
至于何时使用for in循环,当您想要访问对象的键时,您必须*在对象上使用它们(就像在路由
对象上一样)。您不应该将它们用于数组
*如果使用对象获取键,则不必使用它们。键
Javascript迭代器通常比循环更具表现力:
var routes = {
'fr-FR': [
'/accueil',
'/offre',
'/specifications'
],
'en-US': [
'/home',
'/offer',
'/specifications-en'
],
'de-DE': [
'/startseite',
'/annbod',
'/specificaties'
]
};
url = '/annbod'; // did you mean "angebot"?
locale = Object.keys(routes).filter(function(locale) {
return routes[locale].indexOf(url) >= 0;
});
console.log(locale)[0]; // 'de-DE'
谢谢你的帮助!我使用字符串是因为JSLint对locales格式(可能是“-”)很生气,不管怎样,它现在可以工作了。(只是返回的是language
,而不是routeByLanguage
,但这是次要的,再次感谢)。只要允许,就会标记为答案。for..在对象键上循环,而不是在对象值上循环。angebot
可能更好,我用谷歌翻译德语。而且,你的解决方案比我的尝试更漂亮!
var routes = {
'fr-FR': [
'/accueil',
'/offre',
'/specifications'
],
'en-US': [
'/home',
'/offer',
'/specifications-en'
],
'de-DE': [
'/startseite',
'/annbod',
'/specificaties'
]
};
url = '/annbod'; // did you mean "angebot"?
locale = Object.keys(routes).filter(function(locale) {
return routes[locale].indexOf(url) >= 0;
});
console.log(locale)[0]; // 'de-DE'