Javascript-多维数组排序-字符串和整数-按整数排序

Javascript-多维数组排序-字符串和整数-按整数排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,在我的javascript应用程序中拖动div后。。。我想为所有div分配一个数值类,按位置排序。我已经研究了很多,并且建立了下一个。。。但它就是不起作用。(内部HTML不会更改) 这是因为您要覆盖以前的值,您需要在每次迭代中分配一个新对象,要使代码正常工作,它应该如下所示: var ele = document.getElementsByTagName('div'); var i = 0; var MyDrags = [], dst; while (ele[i]) { if (ele

在我的javascript应用程序中拖动div后。。。我想为所有div分配一个数值类,按位置排序。我已经研究了很多,并且建立了下一个。。。但它就是不起作用。(内部HTML不会更改)


这是因为您要覆盖以前的值,您需要在每次迭代中分配一个新对象,要使代码正常工作,它应该如下所示:

var ele = document.getElementsByTagName('div');
var i = 0;
var MyDrags = [], dst;

while (ele[i]) {
    if (ele[i].id.substr(0, 4) === 'drag') {
        MyDrags.push({
            distance: parseInt(document.getElementById(ele[i].id).style.top, 10),
            id: ele[i].id
        });
    }
    i++;
}

MyDrags.sort(function(a, b) {
    return a.distance - b.distance;
});

i = 0; 
while(MyDrags[i]) {
    if (dst = MyDrags[i]['distance']) {
        document.getElementById(MyDrags[i]['id']).style.top = dst + 'px';
        document.getElementById(MyDrags[i++]['id']).innerHTML = dst;
    }
}

我强烈建议您使用Jquery或其他库进行DOM操作。如果你在做任何复杂的事情,它可能会变得毛茸茸的。请使用
MyDrags=[]
而不是
MyDrags=new Array()
-它更干净,更安全。@ChrisFrancis谢谢你,我测试了两次。。。而
newarray()
总是最快的。但是,我将改变我创建数组的方式:)@VoronoiPotato在本例中,它只是一个简单的Y轴拖放。Jquery对于我想要的简单东西来说太完整了:)真的吗?小心这些结果-它的布局很糟糕(1-3是可比的,4-6是可比的)。这是一个更好的测试。谢谢:D但是当我尝试你的代码时,浏览器在拖动div后崩溃(当调用排序代码时)。。。它什么也不做。创建数组时,“dst”是什么意思?@Kenedy,我刚刚指出了语法/用法错误,我没有你页面其余部分的上下文,你介意发布一个完整的JSFIDLE吗?是的,当然。。。谢谢D我粘贴了源于原始HTML的代码,但它在小提琴中不起作用。无论如何,这是原始的完整代码。URL:再次感谢您。现在,问题是它仍然没有显示排序的位置。InnerHTML永远不会更新。如果我在最后一次发出警报,而它从未被调用。。。如果我把它放在while
alert(MyDrags[“distance”])之前它输出“未定义”。。。奇怪…哇。。。它工作得很好!。。。在这种情况下,控制台日志做什么?
var ele = document.getElementsByTagName('div');
var i = 0;
var MyDrags = [], dst;

while (ele[i]) {
    if (ele[i].id.substr(0, 4) === 'drag') {
        MyDrags.push({
            distance: parseInt(document.getElementById(ele[i].id).style.top, 10),
            id: ele[i].id
        });
    }
    i++;
}

MyDrags.sort(function(a, b) {
    return a.distance - b.distance;
});

i = 0; 
while(MyDrags[i]) {
    if (dst = MyDrags[i]['distance']) {
        document.getElementById(MyDrags[i]['id']).style.top = dst + 'px';
        document.getElementById(MyDrags[i++]['id']).innerHTML = dst;
    }
}