将对象数组转换为单个对象,同时保持键的顺序相同

时间:2018-05-21 18:09:36

标签: javascript arrays

我正在尝试将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}

4 个答案:

答案 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);
}