Javascript 将对象数组转换为单个对象,同时保持关键帧的顺序不变

Javascript 将对象数组转换为单个对象,同时保持关键帧的顺序不变,javascript,arrays,Javascript,Arrays,我正在尝试将数组中的对象转换为javascript中的单个对象。以下是数组中的对象以及将其转换为单个对象的逻辑 var arrObj=[{“纯粗体斜体文本”:“2”}、{29:“1”}、{24:“2”}、{21:“2”}、{26:“2”}、{27:“2”}; var obj={}; arrObj.forEach((元素,索引)=>{ obj[Object.keys(element)[0]]=parseInt(Object.values(element.toString()); }); 控制台日

我正在尝试将
数组中的
对象
转换为javascript中的单个
对象
。以下是数组中的对象以及将其转换为单个对象的逻辑

var arrObj=[{“纯粗体斜体文本”:“2”}、{29:“1”}、{24:“2”}、{21:“2”}、{26:“2”}、{27:“2”};
var obj={};
arrObj.forEach((元素,索引)=>{
obj[Object.keys(element)[0]]=parseInt(Object.values(element.toString());
});

控制台日志(obj)
不,不可能与
对象保持相同的顺序
您只能通过使用
排序
和其他函数移动值来使用
数组
来维持顺序,但与
对象
不能保持相同的顺序。您遇到的问题是,JavaScript无法保证对象中的属性顺序;您需要使用
数组
来保存它(正如您在
objArray
中所做的那样)

ECMAScript中对象的定义:

对象 对象是 键入对象。它是一个无序的属性集合每个属性 包含基元值、对象或 函数。存储在数据库中的函数 对象的属性称为 方法

另一种解决方案是地图,而不是本文所述的普通对象:

这里有一个使用map的工作示例:

var arrObj=[{
“纯粗体斜体文本”:“2”
}, {
29: "1"
}, {
24: "2"
}, {
21: "2"
}, {
26: "2"
}, {
27: "2"
}];
var obj=新映射();
arrObj.forEach((元素,索引)=>{
set(Object.keys(element)[0],parseInt(Object.values(element).toString());
});
for(obj的var[键,值]){
console.log(键、值);

}
这并不是你想要的,但这是我所知道的保持一切顺序一致的唯一方法——通过预加下划线,它会使所有键的行为都像字符串一样,并保持正确的顺序。我无法想象你的用例是什么,但这可能会给你一个解决方法

var arrObj=[{“纯粗体斜体文本”:“2”}、{29:“1”}、{24:“2”}、{21:“2”}、{26:“2”}、{27:“2”};
var obj={};
arrObj.forEach((元素,索引)=>{
obj[“”+Object.keys(元素)[0]]=parseInt(Object.values(元素).toString());
});

console.log(obj);
您可以使用

var myObject=newmap();
var arrObj=[{“纯粗体斜体文本”:“2”}、{29:“1”}、{24:“2”}、{21:“2”}、{26:“2”}、{27:“2”};
var result=arrObj.reduce(函数(累加器、对象){
for(对象中的变量键){
myObject.set(key,object[key]);
返回对象
}
},{})
for(结果的var[键,值]){
console.log(key+'='+值);

}
它不适用于数字等键,因为这些键是排序的(第一个).@NinaScholz 29,24,21,26,27未排序。但操作使其排序。我希望键的顺序与它在数组中的顺序相同。在JavaScription中无法保证对象顺序可能重复复制粘贴答案的可能重复不是一件好事。@Nisantdixit您不正确,我添加了一个正确的解决方案和一个指向我获得答案的链接e代码使用户代码正常工作。你的复制答案的问题是,该定义来自的规范非常古老。你可能是从2011年开始复制的。@AsdGerte但它目前的行为相同,没有改变,所以实际上,该定义是新的还是旧的都无关紧要。我添加了定义ion和使用另一种结构的解决方案(
Map
)。不知道这有什么问题:(它在ES6中确实发生了很大的变化。你甚至可以从你抄袭的答案的评论中看到,人们在说“这个答案在ES2015中是错误的”。这是目前比较合适的afaik。请注意,根据规范,
对象.键
不能保证顺序。只是大多数实现给您的顺序与例如
对象.getOwnPropertyNames
相同。哦,我知道,这绝不是一个好主意,只是模仿OP尝试做的一种方式