JavaScript 字典反转

标签 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;
}

最佳答案

对象没有特殊顺序,但您可以获取对象的所有键 ( 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/

相关文章:

javascript - 更改根据点击显示的 anchor ?

javascript - 如何从选择输入字段的多个选项中获取值

javascript - 如何构建我的 nodejs 代码?胖模型/瘦 Controller

Java用给定字符串字符(?)的N个元素填充数组

java - 矩阵乘法-java中的双数组计算

c - C 字符串中 ptr、ptr[0] 和 &ptr[0] 的区别

c - 将带空格的名称或地址输入数组

javascript - Highcharts 基于数据比较的动态列颜色

javascript - 如何计算Javascript中创建的对象的数量?

javascript - 如何将(二进制)整数转换为数组?