Javascript 循环前的数组排序不保留数组排序

Javascript 循环前的数组排序不保留数组排序,javascript,jquery,arrays,sorting,Javascript,Jquery,Arrays,Sorting,我有这样一段代码,它简单地用html元素和循环创建一个数组,用于解析排序数组 $('document').ready(函数(){ var arrElementStyle=[]; $('.bands字母[id*=“band style-”])。每个(函数(索引){ var style=$(this.attr('id').split('-')[2]; arrElementStyle[style+'-'+index]=$(this.find('.element'); }); arrElementSt

我有这样一段代码,它简单地用html元素和循环创建一个数组,用于解析排序数组

$('document').ready(函数(){
var arrElementStyle=[];
$('.bands字母[id*=“band style-”])。每个(函数(索引){
var style=$(this.attr('id').split('-')[2];
arrElementStyle[style+'-'+index]=$(this.find('.element');
});
arrElementStyle.sort();
$('.bands字母顺序').hide();
对于(arrElementStyle中的样式){
$('.large centered.col-md-12.clearfix').append(arrElementStyle[style]);
}
});

摇滚乐
流行音乐
交替

在代码中,您将
arrElementStyle
声明为数组,但后来将其用作插入数据的关联数组。因此,最好将
arrElementStyle
声明为此的对象

下面是一个示例演示,我认为您希望借助于排序对象键的
sort()
,实现以下目标:

$('document').ready(函数(){
var arrElementStyle={};//将arrelemntstyle声明为对象
$('.bands字母[id*=“band style-”])。每个(函数(索引){
var style=$(this.attr('id').split('-')[2];
//推入键的对象-元素
arrElementStyle[style+'-'+index]=$(this.find('.element');
});
//获取arrElementStyle的键以进行排序
var keys=Object.keys(arrElementStyle),
i、 len=键。长度;
log('before=',key);
keys.sort();//对对象键进行排序
log('after=',key);
$('.bands字母顺序').hide();
//迭代排序的键并附加它
对于(i=0;i

摇滚乐
流行音乐
交替

在代码中,您将
arrElementStyle
声明为数组,但后来将其用作插入数据的关联数组。因此,最好将
arrElementStyle
声明为此的对象

下面是一个示例演示,我认为您希望借助于排序对象键的
sort()
,实现以下目标:

$('document').ready(函数(){
var arrElementStyle={};//将arrelemntstyle声明为对象
$('.bands字母[id*=“band style-”])。每个(函数(索引){
var style=$(this.attr('id').split('-')[2];
//推入键的对象-元素
arrElementStyle[style+'-'+index]=$(this.find('.element');
});
//获取arrElementStyle的键以进行排序
var keys=Object.keys(arrElementStyle),
i、 len=键。长度;
log('before=',key);
keys.sort();//对对象键进行排序
log('after=',key);
$('.bands字母顺序').hide();
//迭代排序的键并附加它
对于(i=0;i

摇滚乐
流行音乐
交替

问题是您试图对对象进行排序。。不是数组。让我们使用一个对象并对其键进行排序

$('document').ready(函数(){
//这就是我刚才说的问题
var元素={};
$('.bands Alphaoque').hide().find('[id*=“band style-“]”)。每个(函数(索引){
元素[$(this.attr('id').split('-')[2]+'-'+索引]=$(this.find('.element');
});
变量样式=Object.keys(元素);
styles.sort();
styles.forEach(函数(样式){
$('.large centered.col-md-12.clearfix').append(元素[style]);
});
});

摇滚乐
交替
流行音乐

问题是您试图对对象进行排序。。不是数组。让我们使用一个对象并对其键进行排序

$('document').ready(函数(){
//这就是我刚才说的问题
var元素={};
$('.bands Alphaoque').hide().find('[id*=“band style-“]”)。每个(函数(索引){
元素[$(this.attr('id').split('-')[2]+'-'+索引]=$(this.find('.element');
});
变量样式=Object.keys(元素);
styles.sort();
styles.forEach(函数(样式){
$('.large centered.col-md-12.clearfix').append(元素[style]);
});
});

摇滚乐
交替
流行音乐

问题在于您没有对数组进行排序。您有一个具有不同特性的对象(样式+'-'+索引)

换句话说,Javascript中不存在关联数组。您真正拥有的是一个具有许多属性的对象
arrElementStyle

$('document').ready(函数(){
var arrElementStyle=[];
$('.bands字母[id*=“band style-”])。每个(函数(索引){
var style=$(this.attr('id').split('-')[2];
arrElementStyle[index]=$(this.find('.element');
arrElementStyle[index].bandStyle=$(this).find('.band style title')[0].innerHTML;
});
arrElementStyle.sort(函数(elementA,elementB){
返回elementA.bandStyle>elementB.bandStyle;
});
$('.bands字母顺序').hide();
对于(arrElementStyle中的样式){
美元(’大仙