首页 > 解决方案 > 循环遍历对象,从 Z 组织键 - 反向字母顺序

问题描述

我正在寻找一种方法来反转对象键的字母顺序。目前,它按字母顺序正确存储,确保正确反转键的最佳方法是什么?我看到数组有很多选项可以反转循环,但没有看到任何对象。是否有可能“解除”减少出口的钥匙?

var alph = Object.keys(feedData)
    .sort()
    .reduce(function (acc, key) { 
        acc[key] = feedData[key];
        return acc;
    }, {});

    console.log(alph);


var config = {
    "size": [{
      "F2-1_largerLegal-input": "",
      "F3-1_copy-font": "",
      "Frame-Three": "",
      "_assetKey": "",
      "F3-2_copy-fontSize": "",
      "_jvxRtnWeight": "",
      "CTA-1_copy-fontSize": "",
      "F2-1_copy-font": "",
      "EF-1_largerLegal-fontSize": "",
      "reportingName": "",
      "EF-2_copy-fontSize": "",
      "EF-2_copy-font": "",
      "F2-3_copy-fontSize": "",
      "Frame-One": "",
      "assetVarient": "",
      "F3-1_largerLegal-fontSize": "",
      "EF-1_product-src": "",
      "F3-1_frameLegal-input": "",
      "F3-1_frameLegal-fontSize": "",
      "F3-1_copy-input": "",
      "F2-1_copy-input": "",
      "EF-3_copy-fontSize": "",
      "F2-1_frameLegal-input": "",
      "F3-3_copy-fontSize": "",
      "F3-2_bg-src": "",
      "EF-1_copy-input": "",
      "F2-1_frameLegal-fontSize": "",
      "F2-2_copy-input": "",
      "F2-3_copy-input": "",
      "F3-3_copy-input": "",
      "EF-1_largerLegal-input": "",
      "EF-1_copy-font": "",
      "EF-1_frameLegal-fontSize": "",
      "F3-3_copy-font": "",
      "RO-1_legal-input": "",
      "EF-1_frameLegal-input": "",
      "F2-3_copy-font": "",
      "EF-2_copy-input": "",
      "End-Frame": "",
      "F3-2_copy-input": "",
      "F2-1_copy-fontSize": "",
      "F2-1_product-src": "",
      "F2-2_copy-font": "",
      "rotation": "",
      "F3-2_copy-font": "",
      "exitUrl": "",
      "EF-3_copy-input": "",
      "CTA-1_copy-input": "",
      "F3-1_copy-fontSize": "",
      "EF-1_copy-fontSize": "",
      "Frame-Two": "",
      "F3-1_bg-src": "",
      "EF-3_copy-font": "",
      "weighTag": "",
      "F3-1_largerLegal-input": "",
      "F2-2_copy-fontSize": "",
      "dimensions": "",
      "F2-1_largerLegal-fontSize": ""
    }]
  };

标签: javascriptreduce

解决方案


如评论中所述,您无法确保使用普通对象添加的键的顺序。

如评论中所述,您可以使用排序键的数组,或者我们可以使用 Map 对象,这可以按键添加的顺序进行本机迭代。

这是一个例子:

const initObj = {
  "a": 1,
  "c": 3,
  "b": 2,
  "e": 5,
  "d": 4
}

//Option 1, created a sorted array of keys:
const sortedKeys = Object.keys(initObj).sort((a,b) => b.localeCompare(a));
console.log(sortedKeys);

//now loop over your initObj using our sortedKeys:
console.log("using sortedKeys:");
for (let key of sortedKeys){
  console.log(key, initObj[key]);
}

//Option 2, use a Map object:
const mapObj = new Map(Object.entries(initObj).sort(([key_a, a],[key_b, b]) => key_b.localeCompare(key_a)));

//now loop over your Map Object directly:
console.log("using mapObj:");
for (let [key, val] of mapObj){
  console.log(key, val);
}
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读