首页 > 解决方案 > 使用特殊字符和 spec-char 优先级对映射键进行排序

问题描述

ES6 Map :

const map = new Map();
                map.set('first', ['1', '2']);
                map.set('second', ['abc', 'def']);
                map.set('_third', []);
                map.set(')(*', []);
                map.set('he__e', []);

                console.log(map);

Map 对象按插入顺序迭代其元素。

我在下面对地图进行了排序

var mapAsc = new Map([...map.entries()].sort());
console.log(mapAsc)

但它输出我

0: {")(*" => Array(0)}
1: {"_third" => Array(0)}
2: {"first" => Array(2)}
3: {"he__e" => Array(0)}
4: {"second" => Array(2)}

所以'3'索引有特殊字符init?我希望输出是

0: {")(*" => Array(0)}
1: {"_third" => Array(0)}
2: {"he__e" => Array(0)}
3: {"first" => Array(2)}
4: {"second" => Array(2)}

标签: javascriptobject

解决方案


var jiveTags = new Map();

我在这里复制我的对象的示例数据:

 jiveTags = {
          dev: {
              tagName: "dev",
              contentID: Array(7),
              contentTypes: Array(2),
              tagURL: Array(1),
              occurrences: 7
            }
         }

//

var sortJiveTags = new Map();
    for (var tagValue in jiveTags) {
        for (var i = 0; i < tagValue.length; i++) {
          if (/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi.test(tagValue.charAt(i))) {
                  sortJiveTags[tagValue] = jiveTags[tagValue];
           }
         }
     }// 0(n2) order of n2

一旦我将所有特殊字符的键复制到另一个 Map 对象中,然后我继续使用以下循环复制其余的其他键。

for (var tagValue in jiveTags) {
        if (jiveTags[tagValue] !== sortJiveTags[tagValue]) {
            sortJiveTags[tagValue] = jiveTags[tagValue];
        }
    }

推荐阅读