簡體   English   中英

如何使用javascript或lodash重新排列對象屬性的數組

[英]How to Reorder the Array of object properties using javascript or lodash

我有要寫入Excel文件的對象數組。 我有太多這樣的對象數組

[{'FirstName':'abc','Reg-no':1234,'branch':'mech','ReportDate':'11/12/2014','LastName':'HR'},{'FirstName':'xyz','Reg-no':1235,'branch':'CS','ReportDate':'11/12/2015','LastName':'BC'},{'FirstName':'pqr','Reg-no':1236,'branch':'IS','ReportDate':'11/12/2016','LastName':'TY'}]

我想像這樣重新排列對象屬性,以便在Excel First列中從reg No.開始。

 [{'Reg-no':1234,'ReportDate':'11/12/2014','FirstName':'abc','LastName':'HR','branch':'mech'},
     {'Reg-no':1235,'ReportDate':'11/12/2015','FirstName':'xyz','LastName':'BC','branch':'CS'},
     {'Reg-no':1236,'ReportDate':'11/12/2016','FirstName':'pqr','LastName':'TY','branch':'IS'}
     ]

有人可以幫我嗎?

這是帶有數組的建議。 第一個元素是帶有列說明的數組。 其余元素包含具有所需順序的所需項目。

 var data = [{ 'FirstName': 'abc', 'Reg-no': 1234, 'branch': 'mech', 'ReportDate': '11/12/2014', 'LastName': 'HR' }, { 'FirstName': 'xyz', 'Reg-no': 1235, 'branch': 'CS', 'ReportDate': '11/12/2015', 'LastName': 'BC' }, { 'FirstName': 'pqr', 'Reg-no': 1236, 'branch': 'IS', 'ReportDate': '11/12/2016', 'LastName': 'TY' }], keys = ['Reg-no', 'ReportDate', 'FirstName', 'LastName', 'branch'], array = [keys].concat(data.map(function (a) { return keys.map(function (k) { return a[k]; }); })); console.log(array); 

正如其他人在這里指出的那樣,根據Ecmascript標准,對象中鍵的順序不是固定的。 但是,大多數javascript引擎會按照對象的鍵創建順序對其進行迭代。 因此,您可以執行以下操作:

function reorder(obj, keys) {
    return keys.reduce((newObj, key) => {
        newObj[key] = obj[key];
        return newObj;
    }, {});
}

這樣,調用reorder({ a: 3, b: 5, c: 6}, ['b', 'c', 'a'])很可能會給您{ b: 5, c: 6, a: 3 }

您不能對javascript對象的屬性進行排序,但是可以將數據構造為一個array

[
    [
        {name: 'Reg-no', value: 1234},
        {name: 'ReportDate', value: '11/12/2014'},
        {name: 'FirstName', value: 'abc'},
        {name: 'LastName', value: 'HR'},
        {name: 'branch', value: 'mech'}
    ],
    [
        {name: 'Reg-no', value: 1235},
        {name: 'ReportDate', value: '11/12/2014'},
        {name: 'FirstName', value: 'abc'},
        {name: 'LastName', value: 'HR'},
        {name: 'branch', value: 'mech'}
    ],
    [
        {name: 'Reg-no', value: 1236},
        {name: 'ReportDate', value: '11/12/2014'},
        {name: 'FirstName', value: 'abc'},
        {name: 'LastName', value: 'HR'},
        {name: 'branch', value: 'mech'}
    ]
]

您可以使用標題模板重新排序。 例如:

var headerTemplate = [ 'A', 'B', 'C', 'D' ];

// Unsorted data
var data = [ { C: '1:4', A: '1:3', B: '1:2', D: '1:1' },
             { B: '2:4', C: '2:3', D: '2:2', A: '2:1' },
             { C: '3:4', B: '3:3', D: '3:2', A: '3:1' } ]

var reorderedData = [];
while (data.length>0) {
  var row = data.shift();
  var reorderedRow = [];
  headerTemplate.forEach( function(ch) {
    reorderedRow.push( row[ch] );
  });
  reorderedData.push( reorderedRow );
}
console.log(reorderedData) // ==>

// [ [ '1:3', '1:2', '1:4', '1:1' ],
//   [ '2:1', '2:4', '2:3', '2:2' ],
//   [ '3:1', '3:3', '3:4', '3:2' ] ]

我認為完成這項工作的一種方法是使用新的Map對象。 它將保持鍵值對的插入順序。 您可以按插入順序輕松地分別訪問它們( Map.prototype.keys()Map.prototype.values() )或一起訪問( Map.prototype.entries() ),並按自己喜歡的方式使用Map 。 讓我們來看看...

 var data = [{'Reg-no':1234,'ReportDate':'11/12/2014','FirstName':'abc','LastName':'HR','branch':'mech'}, {'Reg-no':1235,'ReportDate':'11/12/2015','FirstName':'xyz','LastName':'BC','branch':'CS'}, {'Reg-no':1236,'ReportDate':'11/12/2016','FirstName':'pqr','LastName':'TY','branch':'IS'}], datamaps = data.map(o => new Map().set("Reg-no" ,o["Reg-no"]) .set("ReportDate",o.ReportDate) .set("FirstName" ,o.FirstName) .set("LastName" ,o.LastName) .set("branch" ,o.branch)); console.log(...datamaps[0].entries()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM