javascript - 循环遍历对象,从 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": ""
}]
};
解决方案
如评论中所述,您无法确保使用普通对象添加的键的顺序。
如评论中所述,您可以使用排序键的数组,或者我们可以使用 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; }
推荐阅读
- android - 开始编程:如何将 ArrayAdapter 传递给 RecyclerView?
- javascript - 如何将js对象保存为JSON格式
- mkdocs - MkDocs RuntimeError:mkdocs 服务上的 StopIteration
- python - 如何尽可能快地加载大型存储的 pandas 数据帧?
- javascript - 已声明 Javascript 标识符
- r - 从 `data.table` 调用 `fwrite` 函数时内存泄漏
- python - 不使用 Mask RCNN 提取汽车图像
- laravel - 图像源不可读 - laravel
- sql - 如何比较两个表,以便计算两个时间段之间的增长率?
- html - 如何在网格项中使用水平滚动容器?