迭代特定订单上的对象

Dav*_*era 1 javascript json javascript-objects

我有一些像这样的JSON:

{ 
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1 },
} 
Run Code Online (Sandbox Code Playgroud)

现在我需要对这个对象进行交互并在第一级(a,b和c)的每个属性上调用一个函数,但我必须使用"index"属性按顺序执行,比如"c"首先,然后"b" "并且持续"a".

但是我读到我不应该使用for循环:

for ... in循环以任意顺序迭代对象的属性(有关为什么不能依赖于迭代的看似有序性的原因,请参阅delete运算符,至少在跨浏览器设置中).

那我怎么能这样做?

谢谢

H77*_*H77 5

你可以,

  1. 使用获取对象的属性作为数组Object.keys().
  2. 使用对对象的属性进行排序sort().
  3. 使用forEach()通过排序项(其在所述阵列的升序执行)进行迭代.

var items = {
  "a": {
    "text": "text",
    "index": 5
  },
  "b": {
    "text": "text",
    "index": 3
  },
  "c": {
    "text": "text",
    "index": 1,
  }
};

Object.keys(items).sort(function(a, b) {
  return items[a].index - items[b].index;
}).forEach(doStuff);

function doStuff(key) {
  console.log(items[key]);
}
Run Code Online (Sandbox Code Playgroud)