JavaScript字典逆转

时间:2016-05-11 11:16:35

标签: javascript arrays

我有一个包含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;
}

1 个答案:

答案 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;
&#13;
&#13;

修改

版本,分割字符串并首先获得最高值。

&#13;
&#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;
&#13;
&#13;