javascript - 循环遍历数组并将每个元素设置为对象的属性会导致顺序混乱
问题描述
我有一个包含一些 ID 的数组:
let ids = [ '184', '085', '241', '086', '087', '165' ];
和一个空的对象 -let data = {};
我正在遍历数组并将每个元素设置为对象的属性:
ids.forEach(id => {
data[id] = '';
});
我希望数据对象是:
{ '184': '', '085': '', '241': '', '086': '', '087': '', '165': '' }
但是当我console.log(data)
发现属性的顺序被弄乱了并且data
是:
{ '165': '', '184': '', '241': '', '085': '', '086': '', '087': '' }
我也尝试使用这种方法循环遍历数组:
for (let id of ids) {
data[id] = '';
}
但同样的混乱订单结果。我需要知道如何以正确的顺序设置属性,更重要的是,是什么导致了这个问题。
解决方案
您需要使用 aMap
来维护插入顺序。对象键按插入顺序排列,但数字键按升序排列。
let ids = [ '184', '085', '241', '086', '087', '165' ];
const map = new Map;
ids.forEach(id => map.set(id, ''));
map.forEach((val,key)=>console.log(key,'=',val));
推荐阅读
- swift - Xcode 10.2 仍然带有可选 StringProtocol 扩展的 Swift 4.2 Array 不再编译
- c++ - 模板类中的模板构造函数
- azure - Powershell 脚本仅启动列表中的第一个虚拟机
- javascript - 如何获取最后一个顶级表达式的值?
- entity-framework - 如何使用 Autofac 注入相同的 DbContext 实例来处理 HTTP 请求而不会导致并发问题?
- sql - sql号登录并创建sql查询
- javascript - 基于浏览器的会话计时器
- android - 我的 Android Webview 上 iframe 上的 PHP 表单有问题
- python - 有没有一种方法可以只从矩阵中的每一行和每一列中获取所需的索引范围的元素?
- javascript - 外部 Javascript 变量的 HTML 表单输入