Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript或lodash对对象属性数组重新排序_Javascript_Arrays_Node.js_Underscore.js_Lodash - Fatal编程技术网

如何使用javascript或lodash对对象属性数组重新排序

如何使用javascript或lodash对对象属性数组重新排序,javascript,arrays,node.js,underscore.js,lodash,Javascript,Arrays,Node.js,Underscore.js,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,'br

我有一个要写入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的第一列中,它从注册号开始

 [{'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'}
     ]

有人能帮我吗。

你不能对
javascript
对象的属性进行排序,但你可以将数据组织成
数组

[
    [
        {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()
),并以您喜欢的方式使用映射。让我们看看

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=>newmap().set(“注册号”,o[“注册号”)
.set(“报告日期”,o.ReportDate)
.set(“FirstName”,o.FirstName)
.set(“LastName”,o.LastName)
.set(“分支”,o.branch));

console.log(…数据映射[0].entries())这是一个带有数组的方案。第一个元素是具有列描述的数组。其余元素包含具有所需顺序的所需项目

var data=[{'FirstName':'abc','Reg no':1234,'branch':'mech','ReportDate':'11/12/2014','LastName':'HR',{'FirstName':'xyz','regno':1235,'branch':'CS','ReportDate':'11/12/2015','LastName':'BC,{'FirstName':'pqr','regno':1236,'branch':'IS','ReportDate':'11/12/2016','LastName':'TY'},
key=['Reg-no'、'ReportDate'、'FirstName'、'LastName'、'branch'],
array=[keys].concat(data.map)(函数(a){
返回键。映射(函数(k){
返回[k];
});
}));

console.log(数组)正如其他人在这里指出的,根据Ecmascript标准,对象中键的顺序不是固定的。但是,大多数javascript引擎都会按照对象键的创建顺序迭代对象键。所以你可以这样做:

功能重新排序(obj,键){
返回键。减少((newObj,键)=>{
newObj[key]=obj[key];
返回newObj;
}, {});
}

这样,调用
reorder({a:3,b:5,c:6},['b',c',a'])
很可能会给您
{b:5,c:6,a:3}

实际上,您无法对对象的属性进行排序。谢谢@NinaScholz的回复。有什么建议可以修改吗?您可以使用一个数组来代替已定义的顺序,如示例
[['abc,1234,'mech','11/12/2014',/*…*/]