我正在開發一個具有語言切換功能的項目。所以它會拾取當前的url,循環一個json對象並返回它的語言對。Javascript部分通配符在json站點地圖中匹配
所以
/en/cookie-policy
/de/cookie-richtlinie
的問題,我現在要面對的 - 接受一個通配符 - 比如一個ID匹配對
所以不是在JSON硬編碼的所有可能的ID
/en/virtual-conference-room/1
/de/virtuellier-konferenz-raum/1
我想在json中放置一種通配符 - 它將轉錄語言對但保留所需的ID
所以
/en/virtual-conference-room/[:num]
/de/virtuellier-konferenz-raum/[:num]
然後我做語言切換/對比賽 - 產生一個通配符結果爲id爲1,234,1000等。
我認爲它創建否則,如果的情況下 - - 在這一點上允許表達通配符匹配對,但不知道從哪裏開始。
function getUrl(pairUrl, currentLng, enMenu, deMenu, obj) {
for (let k in obj) {
if (!obj.hasOwnProperty(k)) continue
if (obj[k].link === pairUrl) {
if (currentLng === 'de') {
return enMenu[k].link // get en link equivlant
} else {
return deMenu[k].link // get de link equivlant
}
} else if (paritalmatch) {
//finds a wild card match and allows a pair match
}
else {
if (!obj[k].hasOwnProperty('children') || obj[k].children.length <= 0) continue;
var ret = getUrl(pairUrl, currentLng, enMenu[k].children, deMenu[k].children, obj[k].children);
if(typeof ret != 'undefined') return ret;
}
}
}
function getLanguagePair(currentLng, pairUrl) {
// 'find url in json tree'
var enMenu = linkTreeObject.langs[1].lines.menu
var deMenu = linkTreeObject.langs[0].lines.menu
let obj = {}
// find position in tree
if (currentLng === 'de') {
obj = deMenu
} else {
obj = enMenu
}
return getUrl(pairUrl, currentLng, enMenu, deMenu, obj)
}
//works
console.log(getLanguagePair("en", "/en/how-it-works"))
console.log(getLanguagePair("en", "/en/virtual-conference-room/1"))
console.log(getLanguagePair("en", "/en/virtual-conference-room/2"))
你在getUrl函數中有一堆ifs - 這些會更好,就像if,elseif,else conditions? http://jsfiddle.net/0ht35rpb/84/ –
- 這會工作,如果你有像/ en/service/[:num]/borderline –
這樣的網址沒有什麼不同,因爲在每個IF中它應該返回值,所以以下IF將不會被達到。如果你想更新以使用IF ... ELSE,那就行了。通配符不必在鏈接結束時使用,因此它可以用於像/ en/service/[:num]/borderline –