我有一个json文件,如:
"files": {
"audio": {
"number1": {
"enabled": false,
"priority": 5,
},
"number1": {
"enabled": false,
"priority": 1,
},
"number3": {
"enabled": false,
"priority": 2,
}
}
}
var audioMap = {
'number1' : {‘name’:’Num1'},
'number1' : {'name’:'Num2'},
'number3' : {‘name’:'Num3'},
};
我将这个json文件转换为带有一些函数的xml以及这个函数:
function extractFile(data){
var datas = [];
var element = data.files.audio;
for (number in audioFiles) {
var audioName = audioMap[number].name;
datas.push({
name : audioName,
value : audioFiles[number]. 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”/>
我不知道在哪里添加排序并使用“优先级”进行排序
例如,如果我想使用此函数或任何排序函数:
function sortBy(key, reverse) {
var moveSmaller = reverse ? 1 : -1;
var moveLarger = reverse ? -1 : 1;
return function(a, b) {
if (a[key] < b[key]) {
return moveSmaller;
}
if (a[key] > b[key]) {
return moveLarger;
}
return 0;
};
}
答案 0 :(得分:2)
我建议获取密钥数组,对其进行排序,然后将其映射到输出结构。内置的排序功能就足够了,你只需要提供比较功能。
功能性方法 -
function extractFile(data) {
return Object.keys(data.files.audio).sort(function(a,b) {
return data.files.audio[a].priority - data.files.audio[b].priority;
}).map(function(key) {
return { name: audioMap[key].name,
value: data.files.audio[key].enabled ? "true" : "false" };
});
}
如果你需要它在IE中工作&lt; 9您可以执行以下操作:
function extractFile(data) {
var keys = [];
for (key in data.files.audio) {
keys.push(key);
}
return keys.sort(function(a,b) {
return data.files.audio[a].priority - data.files.audio[b].priority;
}).map(function(key) {
return { name: audioMap[key].name,
value: data.files.audio[key].enabled ? "true" : "false" };
});
}