Javascript 通过jqueryui排序表进行json洗牌
我有一个json数组Javascript 通过jqueryui排序表进行json洗牌,javascript,jquery,json,jquery-ui,Javascript,Jquery,Json,Jquery Ui,我有一个json数组 [ { "song_name":"Gerua", "file":"Gerua.mp3", "img_src":"436264562.jpg", }, { "song_name":"Manma Emotion Jaage", "file":"Jaage.mp3", "img_src":"436264562.jpg", }, { "song_name":"Janam Janam", "file
[ {
"song_name":"Gerua",
"file":"Gerua.mp3",
"img_src":"436264562.jpg",
},
{
"song_name":"Manma Emotion Jaage",
"file":"Jaage.mp3",
"img_src":"436264562.jpg",
},
{
"song_name":"Janam Janam",
"file":"Janam.mp3",
"img_src":"436264562.jpg",
}]
我使用jqueryui sortable以下面的方式显示这个数组。
用户可以洗牌此列表
当用户单击“更新”按钮时,我想按照用户选择的顺序洗牌json数组
我最喜欢的数组洗牌算法是,下面是的JavaScript实现:
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
像这样使用它:
shuffleArray(yourArrayOfObject); // Will return shuffled array.
这个算法的运行时间是O(n)好的,我做到了。为li引入了一个临时数组和一个mediaid属性,单击更新按钮读取dom值,按用户通过mediaid洗牌的顺序将值保存到临时数组,将临时数组复制到主数组
$("#update").click(function(e) {
temp_json=[];
$.each($("#sortable>li"), function(key, val) {
temp_json.push(songs_json[$(val).attr('mediaid')]);
});
songs_json=temp_json;
$("#updatedjson").html(JSON.stringify(songs_json, undefined, 2));
});
用户可以洗牌列表,它不是随机的。因此,如果可能的话,您希望json对象与DOM元素的顺序相对应。