我有一些像这样的JSON:
{
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1 },
}
现在我需要对这个对象进行交互并在第一级(a,b和c)的每个属性上调用一个函数,但我必须使用" index"财产,像" c"首先,然后" b"最后" a"。
但是我读到我不应该使用for循环:
for ... in循环以任意顺序迭代对象的属性(有关为什么不能依赖于迭代的看似有序性的原因,请参阅delete运算符,至少在跨浏览器设置中)。
然后我该怎么做?
由于
答案 0 :(得分:5)
你可以,
Object.keys()
将对象的属性作为数组获取。sort()
对对象的属性进行排序。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]);
}
答案 1 :(得分:2)
您可以使用getOwnPropertyNames
let obj = {
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1 }
};
function test(p) {
console.log(p);
}
Object.getOwnPropertyNames(obj)
.reverse()
.forEach(function(p){
test(obj[p]);
});

答案 2 :(得分:1)
您可以尝试以下操作:
排序功能可以实现为:
var obj = {
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1},
}
function sortProperties(obj, sortedBy, isNumericSort, reverse) {
sortedBy = sortedBy || 1; // by default first key
isNumericSort = isNumericSort || false; // by default text sort
reverse = reverse || false; // by default no reverse
var reversed = (reverse) ? -1 : 1;
var sortable = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
sortable.push([key, obj[key]]);
}
}
if (isNumericSort)
sortable.sort(function (a, b) {
return reversed * (a[1][sortedBy] - b[1][sortedBy]);
});
else
sortable.sort(function (a, b) {
var x = a[1][sortedBy].toLowerCase(),
y = b[1][sortedBy].toLowerCase();
return x < y ? reversed * -1 : x > y ? reversed : 0;
});
return sortable; // array in format [ [ key1, val1 ], [ key2, val2 ], ... ]
}
sortProperties(obj, 'index', true, false);
&#13;
答案 3 :(得分:0)
另一个解决方案是存储对象键并将其反转,然后使用对象键进行迭代。
var obj = {
"a": { "text": "text", "index": 5 },
"b": { "text": "text", "index": 3 },
"c": { "text": "text", "index": 1 }
};
var yourFunction = console.log;
var keys = Object.keys(obj);
keys.reverse();
for (var i = 0; i < keys.length; i++) {
yourFunction(obj[keys[i]]);
}
&#13;
答案 4 :(得分:0)
如果您想以相反的顺序访问json项目,也可以使用reverse()
javascript方法。
使用Object.keys()
来获取json的所有键的数组
使用reverse()
方法反转数组
最后你可以使用javascript forEach()
方法来处理json的项目。示例代码如下所示
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]);
});
访问 This link ,详细了解reverse()
方法
答案 5 :(得分:-1)
可能你应该使用Object.keys
获取所有属性的列表,对列表进行排序,然后迭代它。