2

안정적인 정렬 요소를 기본 JavaScript .sort() 함수로 만들려고합니다. IE11 이하를 제외한 모든 브라우저에서 작동합니다.IE11에서 JavaScript 문제에 대한 안정적인 정렬 만들기

참고로
Array.prototype.stableSort = function(cmp) { 

    cmp = !!cmp ? cmp : (function(a, b) { 
     if (a < b) return -1; 
     if (a > b) return 1; 
     return 0; 
    }); 
    let stabilizedThis = this.map(function(el, index) { return [el, index]; }); 

    stabilizedThis.sort(function(a, b) { 
     let order = cmp(a[0], b[0]); 
     if (order != 0) return order; 
     return a[1] - b[1]; 
    }); 

    for (let i=0; i<this.length; i++) { 
     this[i] = stabilizedThis[i][0]; 
    } 
    return this; 
    } 

, 위의 코드는 실제로 내 코드에서이 안정적인 정렬 기능을 사용하고 있지 않다하더라도 실패 : 여기

는 코드입니다. 물론

Array.prototype.stableSort = function(cmp) { 

    cmp = !!cmp ? cmp : (function(a, b) { 
    if (a < b) return -1; 
    if (a > b) return 1; 
    return 0; 
    }); 

    // everything here was removed for testing 

    return this; 
} 

이는 않습니다 : - :

sortedArray.stableSort(function(a,b) { 
    if (type == "string") { 
     return a[index]["value"].toString().localeCompare(b[index]["value"].toString()); 
    } 
    else if (type == "number") { 
     return a[index]["value"] - b[index]["value"]; 
    } 
    }); 

참고 : 내 사용을 이런 식으로 뭔가있을 것입니다 최소한,이 코드는 IE11에서 작동 문제를 수행 좁히려 나는 것을 발견했다 정렬 (또는 안정적인 정렬)은 아니지만 구문 오류가 발생하지는 않습니다.

개발 도구와 콘솔로 인해 오류가 발생한 행 번호가 표시되지 않습니다. 참고로

, 나는이 link에서 발견 한 것은 떨어져 내 코드를 근거로하고있다. 그들은 ES5 (IE11의 한계)와 호환되지 않는 물건을 사용하고 있었기 때문에 조금 변경해야했습니다. 나는 이것으로 다른 것을 놓친 것인지 잘 모르겠다.

무슨 일이 일어나고 있는지 아이디어가 있습니까?

+1

오류의 원인이되는 실제 데이터를 제공 할 수 있습니까? – Dekel

+2

ie11은 'let'과 같이 ES6을 지원하지 않습니다. –

+0

@ NinaScholz 감사합니다! 나는'let'을'var'으로 바꿨을 때 그것을 수정했다고 생각합니다. 상당히 성가시다는 것은 이전에이 작업을 수행했지만 실패했으나 제거 작업이 끝난 다른 ES6 사용이 있었기 때문입니다. 그러나 어떤 이유로 든 나는 다시 돌아 가게했다. 답변을 추가 할 수 있습니다! – KickingLettuce

답변

3

Microsoft IE11은 let 문과 같은 ES6을 지원하지 않습니다.

var 문으로 대체 할 수 있습니다.

Array.prototype.stableSort = function (cmp) { 
    cmp = cmp ||function (a, b) { 
     if (a < b) return -1; 
     if (a > b) return 1; 
     return 0; 
    }; 

    var stabilizedThis = this.map(function (el, index) { return [el, index]; }); 

    stabilizedThis.sort(function (a, b) { 
     return cmp(a[0], b[0]) || a[1] - b[1]; 
    }); 

    for (var i = 0; i < this.length; i++) { 
     this[i] = stabilizedThis[i][0]; 
    } 
    return this; 
}