我有一个包含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;
}
答案 0 :(得分:2)
对象没有特殊顺序,但您可以获取对象的所有键(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>');
&#13;
修改
版本,分割字符串并首先获得最高值。
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>');
&#13;