Ruby's Louvre

每天学习一点点算法

导航

将一个节点集合以最少的步骤转换为另一个节点集合

在avalon中,遇到一个问题,如果我们对一个数组进行排序,无论是按某一规则排序还是乱序,我们都要对对应的DOM区域进行排序。典型的是grid中的TR排序与LI元素的排序。

var old = [0, 1, 2, 4, 5, 6, 7, 8], neo = mess(old.concat())
var n = neo.length;

function mess(arr) {
    var _floor = Math.floor, _random = Math.random,
            len = arr.length, i, j, arri,
            n = _floor(len / 2) + 1;
    while (n--) {
        i = _floor(_random() * len);
        j = _floor(_random() * len);
        if (i !== j) {
            arri = arr[i];
            arr[i] = arr[j];
            arr[j] = arri;
        }
    }
    return arr;
}
console.log("old " + old);
console.log("neo " + neo)
for (var i = 0; i < n; i++) {
    var a = old[i], b = neo[i];
    if (a !== b) {
        old.splice(i, 1);//这里相当于removeChild
        old.push(a);//这里相当于appendChild
        console.log(old);
        i = i - 1
    }

}
console.log("---" + old + "----")

posted on 2013-06-13 10:38  司徒正美  阅读(1173)  评论(2编辑  收藏  举报