Javascript 按特定顺序迭代对象
我有一些类似这样的JSON: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循环以任意顺序对对象
{
"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]);
});