我正在尝试将Objects
中的Array
转换为javascript中的一个Object
。以下是数组中的对象和将其转换为单个对象的逻辑。
var arrObj=[{"Plain bold italic text": "2"},{29: "1"},{24: "2"},{21: "2"},{26: "2"},{27: "2"}];
var obj={};
arrObj.forEach((element, index) => {
obj[Object.keys(element)[0]] = parseInt(Object.values(element).toString());
});
console.log(obj);

string
以及numbers
作为键,但我想保持键的顺序相同。我的逻辑对我不想要的键进行排序。 {"Plain bold italic text": 2, "29": 1,"24": 2,"21": 2,"26": 2,"27": 2}
答案 0 :(得分:0)
不可以,Object
无法维持相同的顺序您可以通过使用Array
和其他功能更改值来仅维持sort
的订单,但您不能与Object
相同1}}。
答案 1 :(得分:0)
您可以使用Map()
来破解对象键顺序
var myObject = new Map();
var arrObj=[{"Plain bold italic text": "2"},{29: "1"},{24: "2"},{21: "2"},{26: "2"},{27: "2"}];
var result = arrObj.reduce(function(accumulator, object){
for(var key in object){
myObject.set(key, object[key]);
return myObject
}
},{})
for (var [key, value] of result) {
console.log(key + ' = ' + value);
}
阅读更多内容: http://www.jstips.co/en/javascript/map-to-the-rescue-adding-order-to-object-properties/
答案 2 :(得分:-1)
这并不是你想要的,但它是我所知道的唯一保持一致的方式 - 通过预先设置下划线,它会使所有键的行为像字符串一样并保持正确的顺序。我无法想象你的用例是什么,但这可能会给你一个解决方法。
var arrObj=[{"Plain bold italic text": "2"},{29: "1"},{24: "2"},{21: "2"},{26: "2"},{27: "2"}];
var obj={};
arrObj.forEach((element, index) => {
obj["_" + Object.keys(element)[0]] = parseInt(Object.values(element).toString());
});
console.log(obj);

答案 3 :(得分:-2)
您遇到的问题是JavaScript中无法保证对象中的属性顺序;您需要使用Array
才能保留它(就像您在objArray
中一样。
ECMAScript中对象的定义:
对象
一个对象是一个成员 类型对象。 这是一个无序的属性集合 包含原始值,对象或 功能。存储在a中的函数 对象的属性称为a 方法
另一种解决方案是地图而不是普通对象,如本文所述: enter link description here
这里有一个有地图的工作示例:
var arrObj = [{
"Plain bold italic text": "2"
}, {
29: "1"
}, {
24: "2"
}, {
21: "2"
}, {
26: "2"
}, {
27: "2"
}];
var obj = new Map();
arrObj.forEach((element, index) => {
obj.set(Object.keys(element)[0], parseInt(Object.values(element).toString()));
});
for (var [key, value] of obj) {
console.log(key, value);
}