js对象键和值的顺序

时间:2016-12-12 15:59:09

标签: javascript angularjs

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

我正在开发一个角度应用程序,它需要遍历一组对象并在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是一个与键匹配的字符串数组。返回数据中的第一个对象包含用于表头的键。

那么最好的方法是一致地获取数据顺序吗? 感谢

1 个答案:

答案 0 :(得分:3)

我可能会按照您希望它们的顺序使用Object.keyssort结果,然后循环遍历该数组以进行输出。

我从你的问题中不清楚你是在谈论dataArray还是headers,所以只是在摘要中:

var obj = {
  c: "see",
  a: "ay",
  b: "bee",
  d: "dee"
};
console.log("Object order:");
var key, keys = [];
for (key in obj) {
  keys.push(key);
}
console.log(keys.map(function(key) { return key + ": " + obj[key];}).join(", "));

console.log("Sorted order:");
keys = Object.keys(obj).sort()
console.log(keys.map(function(key) { return key + ": " + obj[key];}).join(", "));