Javascript 按特定顺序迭代对象

Javascript 按特定顺序迭代对象,javascript,json,javascript-objects,Javascript,Json,Javascript Objects,我有一些类似这样的JSON: { "a": { "text": "text", "index": 5 }, "b": { "text": "text", "index": 3 }, "c": { "text": "text", "index": 1 }, } 现在我需要对这个对象进行交互,并对第一级的每个属性(a、b和c)调用一个函数,但我必须按照顺序使用“index”属性,比如先“c”,然后是“b”,最后是“a” 但是我读到我不应该使用for-in循环: for…in循环以任意顺序对对象

我有一些类似这样的JSON:

{ 
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1 },
} 
现在我需要对这个对象进行交互,并对第一级的每个属性(a、b和c)调用一个函数,但我必须按照顺序使用“index”属性,比如先“c”,然后是“b”,最后是“a”

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

for…in循环以任意顺序对对象的属性进行迭代(有关为什么不能依赖于迭代的表面顺序的更多信息,请参阅delete操作符,至少在跨浏览器设置中是如此)

那我怎么做呢


谢谢

可能您应该使用
对象.keys
来获得所有属性的列表,对该列表进行排序,然后对其进行迭代。

可能您应该使用
对象.keys
来获得所有属性的列表,对该列表进行排序,然后对其进行迭代。

您可以

  • 使用获取对象作为数组的属性
  • 使用对对象的属性进行排序
  • 用于遍历已排序的项(按数组的升序执行)
  • var项目={
    “a”:{
    “文本”:“文本”,
    “指数”:5
    },
    “b”:{
    “文本”:“文本”,
    “索引”:3
    },
    “c”:{
    “文本”:“文本”,
    "索引":1,,
    }
    };
    对象。键(项)。排序(函数(a,b){
    返回项目[a]。索引-项目[b]。索引;
    }).forEach(doStuff);
    函数doStuff(键){
    console.log(项[键]);
    }
    你可以

  • 使用获取对象作为数组的属性
  • 使用对对象的属性进行排序
  • 用于遍历已排序的项(按数组的升序执行)
  • var项目={
    “a”:{
    “文本”:“文本”,
    “指数”:5
    },
    “b”:{
    “文本”:“文本”,
    “索引”:3
    },
    “c”:{
    “文本”:“文本”,
    "索引":1,,
    }
    };
    对象。键(项)。排序(函数(a,b){
    返回项目[a]。索引-项目[b]。索引;
    }).forEach(doStuff);
    函数doStuff(键){
    console.log(项[键]);
    }
    您可以使用

    让obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1}
    };
    功能测试(p){
    控制台日志(p);
    }
    Object.getOwnPropertyNames(obj)
    .reverse()
    .forEach(函数(p){
    试验(obj[p]);
    });您可以使用

    让obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1}
    };
    功能测试(p){
    控制台日志(p);
    }
    Object.getOwnPropertyNames(obj)
    .reverse()
    .forEach(函数(p){
    试验(obj[p]);
    
    });另一种解决方案是存储对象键并将其反转,然后使用对象键进行迭代

    var obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1}
    };
    var yourFunction=console.log;
    var keys=Object.keys(obj);
    键。反转();
    对于(变量i=0;i}
    另一种解决方案是存储对象键并将其反转,然后使用对象键进行迭代

    var obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1}
    };
    var yourFunction=console.log;
    var keys=Object.keys(obj);
    键。反转();
    对于(变量i=0;i}
    您可以尝试以下方法:

  • 将对象转换为数组,数组中的元素按照索引的顺序排序
  • 而不仅仅是排序属性上的forEach()
  • 排序功能可以实现为:

    var obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1},
    }
    函数排序属性(obj、sortedBy、isNumericSort、reverse){
    sortedBy=sortedBy | | 1;//默认情况下第一个键
    isNumericSort=isNumericSort | | false;//默认文本排序
    reverse=reverse | | false;//默认情况下没有反向
    var反向=(反向)?-1:1;
    var可排序=[];
    for(obj中的var键){
    if(对象hasOwnProperty(键)){
    可排序。按([key,obj[key]]);
    }
    }
    如果(isNumericSort)
    sortable.sort(函数(a,b){
    反向返回*(a[1][sortedBy]-b[1][sortedBy]);
    });
    其他的
    sortable.sort(函数(a,b){
    var x=a[1][sortedBy].toLowerCase(),
    y=b[1][sortedBy].toLowerCase();
    返回xy?反向:0;
    });
    返回可排序的;//数组的格式为[[key1,val1],[key2,val2],…]
    }
    
    sortProperties(obj,'索引',true,false)您可以尝试以下操作:

  • 将对象转换为数组,数组中的元素按照索引的顺序排序
  • 而不仅仅是排序属性上的forEach()
  • 排序功能可以实现为:

    var obj={
    “a”:{“文本”:“文本”,“索引”:5},
    “b”:{“文本”:“文本”,“索引”:3},
    “c”:{“文本”:“文本”,“索引”:1},
    }
    函数排序属性(obj、sortedBy、isNumericSort、reverse){
    sortedBy=sortedBy | | 1;//默认情况下第一个键
    isNumericSort=isNumericSort | | false;//默认文本排序
    reverse=reverse | | false;//默认情况下没有反向
    var反向=(反向)?-1:1;
    var可排序=[];
    for(obj中的var键){
    if(对象hasOwnProperty(键)){
    可排序。按([key,obj[key]]);
    }
    }
    如果(isNumericSort)
    sortable.sort(函数(a,b){
    反向返回*(a[1][sortedBy]-b[1][sortedBy]);
    });
    其他的
    
    let obj = {
    "a": { "text": "text", "index": 5 },
    "b": { "text": "text", "index": 3 },
    "c": { "text": "text", "index": 1 },
    }
    
    Object.keys(obj)
                .reverse()
                .forEach(ele => {
                  console.log(obj[ele]);
                });