我有一个有 5 个键的字典 var langDict = {};
IT-PL
EN
DE-FR
ZH-CH
IT-ES
我希望DE-FR在第一位,EN在第二位,其他无所谓。
我正在考虑使用下面的递归方法来实现这一点,但没有得到预期的结果。
for (var key in langDict) {
if (Object.keys(langDict).length > 0) {
langDict = filterKeys(langDict);
}
}
function filterKeys(langDict) {
for (var key in langDict) {
var langDictFiltered = {};
if (key.indexOf("DE") > -1) {
langDictFiltered[key] = langDict[key];
delete langDict[key];
break;
}
if (key.indexOf("EN") > -1) {
langDictFiltered[key] = langDict[key];
delete langDict[key];
break;
}
}
return langDict;
}
最佳答案
对象没有特殊顺序,但您可以获取对象的所有键 ( Object.keys()
) 并使用自定义排序
Array#sort
和排序顺序的哈希表。
稍后您可以使用带有排序键的数组进行填充。
var keys = ['IT - PL', 'EN', 'DE - FR', 'ZH - CH', 'IT - ES'];
keys.sort(function (a, b) {
function value(v) {
return { DE: 1, EN: 2 }[v.substring(0, 2)] || 10;
}
return value(a) - value(b);
});
document.write('<pre>' + JSON.stringify(keys, 0, 4) + '</pre>');
编辑
拆分字符串并首先获取最高值的版本。
var keys = ['IT-PL', 'EN', 'DE-FR', 'ZH-CH', 'IT-ES', 'EN-DE-FR-CH-PL'];
keys.sort(function (a, b) {
function value(v) {
return v.split('-').reduce(function (r, a) {
return Math.min(r, { DE: 1, EN: 2 }[a] || 10);
}, 10);
}
return value(a) - value(b);
});
document.write('<pre>' + JSON.stringify(keys, 0, 4) + '</pre>');
关于JavaScript 字典反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160999/