使用特殊字符和spec-char优先级对映射键进行排序

时间:2018-12-07 11:49:18

标签: javascript object

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)}

1 个答案:

答案 0 :(得分:0)

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];
        }
    }