我正在使用我要写入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':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'}
]
任何人都可以帮我这个。
答案 0 :(得分:1)
这是一个带数组的提案。第一个元素是一个包含列描述的数组。其余元素包含所需订单的所需商品。
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);
答案 1 :(得分:1)
正如其他人在此指出的那样,根据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 }
。
答案 2 :(得分:0)
您无法订购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'}
]
]
答案 3 :(得分:0)
您可以使用标题模板重新排序。例如:
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' ] ]
答案 4 :(得分:0)
我认为执行此工作的一种方法是使用新的Map对象。它将保持键值对的插入顺序。您可以按照插入顺序轻松访问它们(template <typename T, int N>
struct VectorStorage {
VectorStorage(const size_t) {}
T data[N];
};
static const int Dynamic = -1;
template <typename T>
struct VectorStorage<T, Dynamic> {
VectorStorage(const size_t n) : data(new T[n]) {}
~VectorStorage() { delete[] data; }
// define copy ops, etc.
T* data;
};
template <typename T, int N>
class Vector {
public:
Vector(const size_t n) : storage(n) {}
T operator[](const size_t i) const { return storage.data[i]; }
// etc.
private:
VectorStorage<T,N> storage;
};
或Map.prototype.keys()
)或一起(Map.prototype.values()
),并按照您喜欢的方式使用地图。我们来看看......
Map.prototype.entries()
&#13;