Javascript js对象键和值的顺序
我知道javascript对象对于它包含的键/值对没有固有的顺序,但我遇到了一个有趣的问题,希望有人能给我指出一个解决方案 我正在开发一个angular应用程序,它需要遍历对象数组,并在UI中显示给定键的值。这是表格数据。非常基本。问题来自后端数据源。数据是从多个源聚合而来的,并非所有对象都获得所有的键/值。我们无法控制后端。此外,存在数量可变的键/值对。因此,我在前端看到的可能是这样的:Javascript js对象键和值的顺序,javascript,angularjs,Javascript,Angularjs,我知道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, 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
是一个有明确顺序的名字;我还是会说对象属性没有顺序。谢谢,这帮了大忙,我得到了一串键/值对,我可以将它们强制转换成我要找的对象,谢谢,这帮了大忙,我得到了一串键/值对,我可以强制转换成我要找的对象,