Javascript js对象键和值的顺序

Javascript js对象键和值的顺序,javascript,angularjs,Javascript,Angularjs,我知道javascript对象对于它包含的键/值对没有固有的顺序,但我遇到了一个有趣的问题,希望有人能给我指出一个解决方案 我正在开发一个angular应用程序,它需要遍历对象数组,并在UI中显示给定键的值。这是表格数据。非常基本。问题来自后端数据源。数据是从多个源聚合而来的,并非所有对象都获得所有的键/值。我们无法控制后端。此外,存在数量可变的键/值对。因此,我在前端看到的可能是这样的: [{ A: a, B: b, C: c}, {B: b, C: c}] 我可以迭代返回的数组并添加缺少的

我知道javascript对象对于它包含的键/值对没有固有的顺序,但我遇到了一个有趣的问题,希望有人能给我指出一个解决方案

我正在开发一个angular应用程序,它需要遍历对象数组,并在UI中显示给定键的值。这是表格数据。非常基本。问题来自后端数据源。数据是从多个源聚合而来的,并非所有对象都获得所有的键/值。我们无法控制后端。此外,存在数量可变的键/值对。因此,我在前端看到的可能是这样的:

[{ A: a, B: b, C: c}, {B: b, C: c}]
我可以迭代返回的数组并添加缺少的键,但可能出现问题,即:

[{ A: a, B: b, C:c}, {B: b, C: c, A: a}]
当然,这会导致数据显示不正确

for(var val of dataArray){
        for(var header of headers){
            val.environmentMetrics[header] = val.environmentMetrics[header] || 0;
        }
    }
headers是与键匹配的字符串数组。返回数据中的第一个对象包含用于表头的键

那么,保持数据顺序一致的最佳方法是什么?
谢谢

我可能会使用
Object.keys
按您希望的顺序对结果进行排序,然后循环该数组进行输出

从你的问题来看,我不清楚你是在谈论
dataArray
还是
headers
,因此,仅在摘要中:

var obj={
c:“见”,
答:"嗯",,
b:“蜜蜂”,
d:“迪”
};
log(“对象顺序:”);
变量键,键=[];
用于(输入obj){
按键。按(键);
}
log(keys.map(函数(key){returnkey+”:“+obj[key];}).join(“,”);
日志(“排序顺序:”);
keys=Object.keys(obj.sort())

log(keys.map(函数(key){returnkey+”:“+obj[key];}).join(“,”)
我可能会使用
Object.keys
按您希望的顺序对结果进行排序,然后循环该数组进行输出

从你的问题来看,我不清楚你是在谈论
dataArray
还是
headers
,因此,仅在摘要中:

var obj={
c:“见”,
答:"嗯",,
b:“蜜蜂”,
d:“迪”
};
log(“对象顺序:”);
变量键,键=[];
用于(输入obj){
按键。按(键);
}
log(keys.map(函数(key){returnkey+”:“+obj[key];}).join(“,”);
日志(“排序顺序:”);
keys=Object.keys(obj.sort())

log(keys.map(函数(key){returnkey+”:“+obj[key];}).join(“,”)对键名排序?“我知道javascript对象对于它所包含的键/值对没有固有的顺序”,从ES2015开始,这不再是真的。但是,依赖该订单仍然不是一个好主意,也无助于解决此问题。:-)@T.J.Crowder这仍然是事实<代码>用于。。在中,
有一个定义良好的迭代顺序,并且
对象。keys()
保证以相同的定义良好的顺序返回键,但对象本身仍然没有顺序。@Paulpro:实际上,这完全是向后的。:-)对象属性有一个顺序,但在
对象中的
。键
不能保证它们遵循顺序。只有像
Object.getOwnPropertyNames等新操作才有这种保证。in
Object.key
顺序仍然未指定,只是它们必须相互匹配(对于可枚举属性)。请看:@T.J.Crowder是的,我倒过来看,
Object.getOwnPropertyNames
是一个有明确顺序的名字;但我仍然会说对象属性没有顺序。对键名排序?“我知道javascript对象对于它包含的键/值对没有固有的顺序”,这在ES2015中不再正确。但是,依赖该订单仍然不是一个好主意,也无助于解决此问题。:-)@T.J.Crowder这仍然是事实<代码>用于。。在中,
有一个定义良好的迭代顺序,并且
对象。keys()
保证以相同的定义良好的顺序返回键,但对象本身仍然没有顺序。@Paulpro:实际上,这完全是向后的。:-)对象属性有一个顺序,但在和对象中的
。键
不能保证它们遵循顺序。只有像
Object.getOwnPropertyNames等新操作才有这种保证。in
Object.key
顺序仍然未指定,只是它们必须相互匹配(对于可枚举属性)。请看:@T.J.Crowder是的,我倒过来看,
Object.getOwnPropertyNames
是一个有明确顺序的名字;我还是会说对象属性没有顺序。谢谢,这帮了大忙,我得到了一串键/值对,我可以将它们强制转换成我要找的对象,谢谢,这帮了大忙,我得到了一串键/值对,我可以强制转换成我要找的对象,