0

私はほぼ並べ替えられた〜1000個のオブジェクトの配列を持っており、{val: N}それらを組み込みで並べ替えていますArray.prototype.sort

arr.sort(function(a, b) { return a.val - b.val });

http://jsperf.com/javascript-sort/16に出くわし、挿入ソートを使用しようとしました。

for (i = 1; i < arr.length; i++) {
    var tmp = arr[i],
    j = i;
    while (arr[j-1].val > tmp.val) {
        arr[j] = arr[j-1];
        --j;
    }
    arr[j] = tmp;
}

ただし、常にエラーがスローされますTypeError: Cannot read property 'kills' of undefined

どこを掘る?

前もって感謝します。

4

1 に答える 1

1

ループ内のjの境界チェックが欠落しています。

while (j > 0 && arr[j-1].val > tmp.val) {
    arr[j] = arr[j-1];
    --j;
}
于 2013-01-14T14:21:15.237 に答える