我有一个json文件,如:
"files": {
"audio": {
"number1": {
"enabled": false,
"priority": 5,
},
"number2": {
"enabled": false,
"priority": 1,
},
"number3": {
"enabled": false,
"priority": 2,
}
}
}
我将这个json文件转换为带有一些函数的xml以及这个函数:
function extractFile(data){
// adding for loop to check priority number?
var datas = [];
var element = data.files.audio;
datas.push({
name : 'Num1',
enabled : element. number1.enabled? "true":"false"
});
datas.push({
name : 'Num2',
enabled : element. number2.enabled? "true":"false"
});
datas.push({
name : 'Num3',
enabled : element. number3.enabled? "true":"false"
});
return datas;
}
输出结果为:
<file name="Num1" enabled="false"/>
<file name="Num2" enabled="false"/>
<file name="Num3" enabled="false”/>
如何根据json中的优先级编号对它们进行排序?
输出必须如下:
<file name="Num2" enabled="false"/>
<file name="Num3" enabled="false"/>
<file name="Num1" enabled="false”/>
答案 0 :(得分:2)
您的代码中需要一个循环,可以在订单中迭代data.files.audio
。看起来这是一个对象而不是一个数组,所以请尝试Iterate through object properties来创建一个数组。
然后,您需要使用Sort array of objects by string property value in JavaScript的答案对data.files.audio
数组进行排序。
修改强>
function extractFiles(data) {
var elements = [];
var files = [];
// create an array of your source data objects
for (var property in data.files.audio) {
if (data.files.audio.hasOwnProperty(property)) {
var p = data.files.audio[property];
p.name = property.toString();
elements.push(p);
}
}
// create function to sort object array by priority
function compareFiles(a, b) {
if (a.priority < b.priority) return -1;
if (a.priority > b.priority) return 1;
return 0;
}
// create data for xml from sorted object array
for (var e in elements.sort(compareFiles)) {
files.push({
name: elements[e].name,
enabled: elements[e].enabled ? "true" : "false"
});
}
return files;
}