source

정수 배열을 올바르게 정렬하는 방법

itover 2022. 10. 18. 23:17
반응형

정수 배열을 올바르게 정렬하는 방법

정수만 포함하는 배열에서 최고값과 최저값을 얻는 것은 생각보다 어려운 것 같습니다.

var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)

은 「 」라고 표시되어 있을 것입니다.99, 104, 140000 신신표표 . . . . . . ..104, 140000, 99이 정렬은 값을 문자열로 처리하는 것 같습니다.

정렬 함수를 실제로 정수 값으로 정렬할 수 있는 방법이 있습니까?

기본적으로 정렬 방법은 요소를 알파벳 순으로 정렬합니다.숫자로 정렬하려면 숫자 정렬을 처리하는 새로운 메서드(sort Number, 아래 그림 참조)를 추가합니다.

var numArray = [140000, 104, 99];
numArray.sort(function(a, b) {
  if( a === Infinity ) 
    return 1; 
  else if( isNaN(a)) 
    return -1;
  else 
    return a - b;
});

console.log(numArray);

문서:

Mozilla는 Infinity 또는 NaN을 포함하지 않는 어레이에 이 비교 기능을 권장합니다(이유는Infinity - Infinity0 0 NaN 니 0 0 0 0 ) 。NaN Infinity 과 、 Sergio Abreu 、 NaN Infinity 。

키를 기준으로 객체를 정렬하는 예도 있습니다.

위의 모든 답변을 바탕으로 다음과 같이 한 줄에 걸쳐 수행할 수도 있습니다.

var numArray = [140000, 104, 99];
numArray = numArray.sort(function (a, b) {  return a - b;  });

//outputs: 99, 104, 140000

왜 모든 사람들이 비교기 기능을 다음에 건네줄 것을 추천하는지 놀랍다.sort()이치

숫자를 정렬하려면 Typeed Array를 작성하기만 하면 됩니다.

var numArray = new Float64Array([140000, 104, 99]);
numArray = numArray.sort();
console.log(numArray)

array.displays는 기본적으로 사전 정렬을 수행합니다.숫자 정렬의 경우 사용자 고유의 함수를 제공합니다.다음은 간단한 예입니다.

function compareNumbers(a, b)
{
    return a - b;
}

numArray.sort(compareNumbers);

또한 정렬은 "제자리"에서 작동하므로 할당이 필요하지 않습니다.

이 답변은 기존 답변 중 일부와 동일하지만 ECMAScript 6 화살표 함수는 가독성을 희생하지 않고 인라인 정렬 함수를 정의할 수 있는 보다 콤팩트한 구문을 제공합니다.

numArray = numArray.sort((a, b) => a - b);

현재 대부분의 브라우저에서 지원됩니다.

정렬 기능이 이상하게 동작하는 이유

매뉴얼에서 다음 항목을 참조하십시오.

[...] 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니코드 코드 포인트 값에 따라 정렬됩니다.

배열의 유니코드 포인트 값을 인쇄하면 선명해집니다.

console.log("140000".charCodeAt(0));
console.log("104".charCodeAt(0));
console.log("99".charCodeAt(0));

//Note that we only look at the first index of the number "charCodeAt(  0  )"

"49, 49, 57"이 반환됩니다.

49 (unicode value of first number at 140000)
49 (unicode value of first number at 104)
57 (unicode value of first number at 99)

140000과 104가 같은 값(49)을 반환했기 때문에 첫 번째 인덱스를 잘라내고 다시 확인합니다.

console.log("40000".charCodeAt(0));
console.log("04".charCodeAt(0));

//Note that we only look at the first index of the number "charCodeAt(  0  )"

52 (unicode value of first number at 40000)
40 (unicode value of first number at 04)

이것을 분류하면, 다음과 같이 됩니다.

40 (unicode value of first number at 04)
52 (unicode value of first number at 40000)

그래서 104는 140000보다 먼저 옵니다.

최종 결과는 다음과 같습니다.

var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)

104, 140000, 99

결론:

sort()을 사용하다 sort()에서는, 다른 보다 큰 그합니다.또, 유니코드 값이 는, 해 비교합니다.

는 비교 .sort()여기서 설명한 바와 같이.

하다.sort((a, b) => a - b).sort() 자체

var numArray = [140000, 104, 99];
numArray.sort((a, b) => a - b);
console.log(numArray)

aks에 동의합니다만,

return a - b;

를 사용해 주세요.

return a > b ? 1 : a < b ? -1 : 0;

오름

arr.sort((a, b) => a - b);

내림차순

arr.sort((a, b) => b - a);

재미삼아:

내림차순 = 상승 + 후진

arr.sort((a, b) => a - b).reverse();

JavaScript에서 sort() 메서드의 기본 동작은 배열 내의 값을 알파벳 순으로 정렬하는 것입니다.

숫자로 정렬하려면 숫자 정렬 함수를 정의해야 합니다(매우 쉽습니다).

...
function sortNumber(a, b)
{
  return a - b;
}

numArray = numArray.sort(sortNumber);

은 이미이 끝난 빠른 은 """를 사용하는 입니다.sort()하지만 할 수 있는 사이클다음 항목보세요.

삽입 정렬

상승:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
    var target = numArray[i];
    for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) {
        numArray[j+1] = numArray[j];
    }
    numArray[j+1] = target
}
console.log(numArray);

내림차순:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length; i++) {
    var target = numArray[i];
    for (var j = i - 1; j >= 0 && (numArray[j] < target); j--) {
        numArray[j+1] = numArray[j];
    }
    numArray[j+1] = target
}
console.log(numArray);

선택 정렬:

상승:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
    var min = i;
    for (var j = i + 1; j < numArray.length; j++) {
        if (numArray[j] < numArray[min]) {
            min = j;
        }
    }
    if (min != i) {
        var target = numArray[i];
        numArray[i] = numArray[min];
        numArray[min] = target;
    }
}
console.log(numArray);

내림차순:

var numArray = [140000, 104, 99];
for (var i = 0; i < numArray.length - 1; i++) {
    var min = i;
    for (var j = i + 1; j < numArray.length; j++) {
        if (numArray[j] > numArray[min]) {
            min = j;
        }
    }
    if (min != i) {
        var target = numArray[i];
        numArray[i] = numArray[min];
        numArray[min] = target;
    }
}
console.log(numArray);

즐겁게 보내세요

어레이를 정렬하는 방법은 Array.protype.sort()이지만 몇 가지 주의해야 할 문제가 있습니다.

정렬 순서는 기본적으로 사전 형식이며 배열의 값 유형에 관계없이 숫자가 아닙니다.배열이 모두 숫자인 경우에도 모든 값이 문자열로 변환되고 사전 편집에 따라 정렬됩니다.

따라서 다음과 같이 sort() 메서드와 reverse() 메서드를 커스터마이즈해야 합니다.

참조 URL

배열 내 번호 정렬용

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

배열 내 번호 반전용

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

참조 URL

아래 함수는 콜백 함수로 제공되는 경우 대부분의 경우 숫자 배열 정렬의 목적으로 사용됩니다.

function numerically(a, b){
    return a-b;
}

array.sort(numerically); 

그러나 어레이에 매우 크고 음의 숫자가 포함되어 있는 드문 경우이지만 a-b의 결과가 JavaScript가 처리할 수 있는 최소 수보다 작아지면 오버플로 오류가 발생할 수 있습니다.

따라서 숫자 함수를 더 잘 쓰는 방법은 다음과 같습니다.

function numerically(a, b){
   if(a < b){
      return -1;
   } else if(a > b){
      return 1;
   } else {
      return 0;
   }
}

정의되지 않은 Null 및 NaN 처리: Null은 0과 같이 동작하며 NaN 및 정의되지 않은 것은 종료됩니다.

array = [3, 5, -1, 1, NaN, 6, undefined, 2, null]
array.sort((a,b) => isNaN(a) || a-b)
// [-1, null, 1, 2, 3, 5, 6, NaN, undefined]

JavaScript에서는 필수는 아니지만, compareFunction(우주선 운영자가 PHP에서 작동하는 방식과 유사) -1, 0 또는 1을 엄격하게 반환하려면 를 사용할 수 있습니다.

compareFunction 1는 하게 -1, 0은 1을 반환합니다.

numArray.sort((a, b) => Math.sign(a - b));

Math.sign()【인터넷 익스플로러】

요소 값의 일반 배열의 경우:

function sortArrayOfElements(arrayToSort) {
    function compareElements(a, b) {
        if (a < b)
            return -1;
        if (a > b)
            return 1;
        return 0;
    }

    return arrayToSort.sort(compareElements);
}

e.g. 1:
var array1 = [1,2,545,676,64,2,24]
**output : [1, 2, 2, 24, 64, 545, 676]**

var array2 = ["v","a",545,676,64,2,"24"]
**output: ["a", "v", 2, "24", 64, 545, 676]**

객체 배열의 경우:

function sortArrayOfObjects(arrayToSort, key) {
    function compareObjects(a, b) {
        if (a[key] < b[key])
            return -1;
        if (a[key] > b[key])
            return 1;
        return 0;
    }

    return arrayToSort.sort(compareObjects);
}

e.g. 1: var array1= [{"name": "User4", "value": 4},{"name": "User3", "value": 3},{"name": "User2", "value": 2}]

**output : [{"name": "User2", "value": 2},{"name": "User3", "value": 3},{"name": "User4", "value": 4}]**

과 그에 입니다.numArray.sort((a,b) => a - b)배열에 무한대나 NaN이 없는 숫자만 포함되어 있는 경우 매우 유용합니다.다음과 같이 무한 및 NaN을 처리하도록 확장할 수 있습니다.

numArray.sort((a,b) => (+a || 0) - (+b || 0) || 0);

이것은 NaN(또는 'foo'나 {} 등 번호가 아닌 것)을 0과 같이 정렬합니다. ★★★★★★|| 0a와 b가 동일한 무한인 경우를 처리하기 위해 필요합니다.

Array.sort는 숫자 대신 알파벳 정렬을 사용합니다.

숫자를 지원하려면 다음과 같이 추가합니다.

var numArray = [140000, 104, 99];
numArray.sort((a, b) =>  a - b); // <-- Ascending
numArray.sort((a, b) =>  b - a); // <-- Descending
console.log(numArray);

출력:

배열 숫자 정렬

답의 맨 !smartSort★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!
모든 배열 정렬!

개인적으로 좋아하는 이 함수의 형식에서는 상승 또는 내림차순 파라미터를 사용할 수 있습니다.

function intArraySort(c, a) {
    function d(a, b) { return b - a; }
    "string" == typeof a && a.toLowerCase();
    switch (a) {
        default: return c.sort(function(a, b) { return a - b; });
        case 1:
                case "d":
                case "dc":
                case "desc":
                return c.sort(d)
    }
};

사용법은 다음과 같습니다.

var ara = function getArray() {
        var a = Math.floor(Math.random()*50)+1, b = [];
        for (i=0;i<=a;i++) b.push(Math.floor(Math.random()*50)+1);
        return b;
    }();

//    Ascending
intArraySort(ara);
console.log(ara);

//    Descending
intArraySort(ara, 1);
console.log(ara);

//    Ascending
intArraySort(ara, 'a');
console.log(ara);

//    Descending
intArraySort(ara, 'dc');
console.log(ara);

//    Ascending
intArraySort(ara, 'asc');
console.log(ara);

jsFiddle


또는 코드 조각 예제 여기!

function intArraySort(c, a) {
	function d(a, b) { return b - a }
	"string" == typeof a && a.toLowerCase();
	switch (a) {
		default: return c.sort(function(a, b) { return a - b });
		case 1:
		case "d":
		case "dc":
		case "desc":
		return c.sort(d)
	}
};

function tableExample() {
	var d = function() {
			var a = Math.floor(50 * Math.random()) + 1,
				b = [];
			for (i = 0; i <= a; i++) b.push(Math.floor(50 * Math.random()) + 1);
			return b
		},
		a = function(a) {
			var b = $("<tr/>"),
				c = $("<th/>").prependTo(b);
			$("<td/>", {
				text: intArraySort(d(), a).join(", ")
			}).appendTo(b);
			switch (a) {
				case 1:
				case "d":
				case "dc":
				case "desc":
					c.addClass("desc").text("Descending");
					break;
				default:
					c.addClass("asc").text("Ascending")
			}
			return b
		};
	return $("tbody").empty().append(a(), a(1), a(), a(1), a(), a(1), a(), a(1), a(), a(1), a(), a(1))
};

tableExample();
table { border-collapse: collapse; }
th, td { border: 1px solid; padding: .25em .5em; vertical-align: top; }
.asc { color: red; }
.desc { color: blue }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table><tbody></tbody></table>


.smartSort('asc' | 'desc')

다양한 아이템을 정렬하는 정렬 방법으로 더욱 즐겁게!현재 "관련성"(일명 문자열 키)은 다루지 않지만, 모든 유형의 가치를 다룹니다!만 아니라 여러 값도 할 수 있습니다.asc ★★★★★★★★★★★★★★★★★」desc따라서 가치의 "그룹"의 "위치"를 일정하게 유지할 것이다. 첫 번째, 그 에 문자열, 그 에 배열인 것을 !), 그 날짜 마지막으로되지 않은 과 null!, int, int, int의 int, ada의 int, ada의 undefined.

"왜?"라고 묻는다.당연하죠!

2번!는 ""를 사용하기 때문에 합니다.Object.defineProperty Array.protoype물건.이를 통해 다음과 같은 자연 사용이 용이해집니다.myArray.smartSort('a')오래된 브라우저를 구현해야 하거나 네이티브 오브젝트를 수정하는 것이 싫다면 메서드 전용 버전으로 스크롤 다운합니다.

/* begin */
/* KEY NOTE! Requires EcmaScript 5.1 (not compatible with older browsers) */
;;(function(){if(Object.defineProperty&&!Array.prototype.smartSort){var h=function(a,b){if(null==a||void 0==a)return 1;if(null==b||void 0==b)return-1;var c=typeof a,e=c+typeof b;if(/^numbernumber$/ig.test(e))return a-b;if(/^stringstring$/ig.test(e))return a>b;if(/(string|number){2}/ig.test(e))return/string/i.test(c)?1:-1;if(/number/ig.test(e)&&/object/ig.test(e)||/string/ig.test(e)&&/object/ig.test(e))return/object/i.test(c)?1:-1;if(/^objectobject$/ig.test(e)){a instanceof Array&&a.smartSort("a");b instanceof Array&&b.smartSort("a");if(a instanceof Date&&b instanceof Date)return a-b;if(a instanceof Array&&b instanceof Array){var e=Object.keys(a),g=Object.keys(b),e=e.concat(g).smartSort("a"),d;for(d in e)if(c=e[d],a[c]!=b[c])return d=[a[c],b[c]].smartSort("a"),a[c]==d[0]?-1:1;var f=[a[Object.keys(a)[0]],b[Object.keys(b)[0]]].smartSort("a");return a[Object.keys(a)[0]]==f[0]?-1:1}if(a instanceof Element&&b instanceof Element){if(a.tagName==b.tagName)return e=[a.id,b.id].smartSort("a"),a.id==e[0]?1:-1;e=[a.tagName, b.tagName].smartSort("a");return a.tagName==e[0]?1:-1}if(a instanceof Date||b instanceof Date)return a instanceof Date?1:-1;if(a instanceof Array||b instanceof Array)return a instanceof Array?-1:1;e=Object.keys(a);g=Object.keys(b);e.concat(g).smartSort("a");for(c=0;20>c;c++){d=e[c];f=g[c];if(a.hasOwnProperty(d)&&b.hasOwnProperty(f)){if(a[d]instanceof Element&&b[f]instanceof Element){if(a[d].tagName==b[f].tagName)return c=[a[d].id,b[f].id].smartSort("a"),a[d].id==c[0]?-1:1;c=[a[d].tagName,b[f].tagName].smartSort("d"); return a[d].tagName==c[0]?1:-1}if(a[d]instanceof Element||b[f]instanceof Element)return a[d]instanceof Element?1:-1;if(a[d]!=b[f])return c=[a[d],b[f]].smartSort("a"),a[d]==c[0]?-1:1}if(a.hasOwnProperty(d)&&a[d]instanceof Element)return 1;if(b.hasOwnProperty(f)&&b[f]instanceof Element||!a.hasOwnProperty(d))return-1;if(!b.hasOwnProperty(d))return 1}c=[a[Object.keys(a)[0]],b[Object.keys(b)[0]]].smartSort("d");return a[Object.keys(a)[0]]==c[0]?-1:1}g=[a,b].sort();return g[0]>g[1]},k=function(a,b){if(null== a||void 0==a)return 1;if(null==b||void 0==b)return-1;var c=typeof a,e=c+typeof b;if(/^numbernumber$/ig.test(e))return b-a;if(/^stringstring$/ig.test(e))return b>a;if(/(string|number){2}/ig.test(e))return/string/i.test(c)?1:-1;if(/number/ig.test(e)&&/object/ig.test(e)||/string/ig.test(e)&&/object/ig.test(e))return/object/i.test(c)?1:-1;if(/^objectobject$/ig.test(e)){a instanceof Array&&a.smartSort("d");b instanceof Array&&b.smartSort("d");if(a instanceof Date&&b instanceof Date)return b-a;if(a instanceof Array&&b instanceof Array){var e=Object.keys(a),g=Object.keys(b),e=e.concat(g).smartSort("a"),d;for(d in e)if(c=e[d],a[c]!=b[c])return d=[a[c],b[c]].smartSort("d"),a[c]==d[0]?-1:1;var f=[a[Object.keys(a)[0]],b[Object.keys(b)[0]]].smartSort("d");return a[Object.keys(a)[0]]==f[0]?-1:1}if(a instanceof Element&&b instanceof Element){if(a.tagName==b.tagName)return e=[a.id,b.id].smartSort("d"),a.id==e[0]?-1:1;e=[a.tagName,b.tagName].smartSort("d");return a.tagName==e[0]?-1:1}if(a instanceof Date||b instanceof Date)return a instanceof Date?1:-1;if(a instanceof Array||b instanceof Array)return a instanceof Array?-1:1;e=Object.keys(a);g=Object.keys(b);e.concat(g).smartSort("a");for(c=0;20>c;c++){d=e[c];f=g[c];if(a.hasOwnProperty(d)&&b.hasOwnProperty(f)){if(a[d]instanceof Element&&b[f]instanceof Element){if(a[d].tagName==b[f].tagName)return c=[a[d].id,b[f].id].smartSort("d"),a[d].id==c[0]?-1:1;c=[a[d].tagName,b[f].tagName].smartSort("d");return a[d].tagName==c[0]?-1:1}if(a[d]instanceof Element||b[f]instanceof Element)return a[d]instanceof Element?1:-1;if(a[d]!=b[f])return c=[a[d],b[f]].smartSort("d"),a[d]==c[0]?-1:1}if(a.hasOwnProperty(d)&&a[d]instanceof Element)return 1;if(b.hasOwnProperty(f)&&b[f]instanceof Element)return-1;if(!a.hasOwnProperty(d))return 1;if(!b.hasOwnProperty(d))return-1}c=[a[Object.keys(a)[0]],b[Object.keys(b)[0]]].smartSort("d");return a[Object.keys(a)[0]]==c[0]?-1:1}g=[a,b].sort();return g[0]<g[1]};Object.defineProperty(Array.prototype,"smartSort",{value:function(){return arguments&& (!arguments.length||1==arguments.length&&/^a([sc]{2})?$|^d([esc]{3})?$/i.test(arguments[0]))?this.sort(!arguments.length||/^a([sc]{2})?$/i.test(arguments[0])?h:k):this.sort()}})}})();
/* end */

jsFiddle Array.protype.smartSort('asc|desc')


사용법은 간단!먼저 다음과 같은 엉뚱한 어레이를 만듭니다.

window.z = [ 'one', undefined, $('<span />'), 'two', null, 2, $('<div />', { id: 'Thing' }), $('<div />'), 4, $('<header />') ];
z.push(new Date('1/01/2011'));
z.push('three');
z.push(undefined);
z.push([ 'one', 'three', 'four' ]);
z.push([ 'one', 'three', 'five' ]);
z.push({ a: 'a', b: 'b' });
z.push({ name: 'bob', value: 'bill' });
z.push(new Date());
z.push({ john: 'jill', jack: 'june' });
z.push([ 'abc', 'def', [ 'abc', 'def', 'cba' ], [ 'cba', 'def', 'bca' ], 'cba' ]);
z.push([ 'cba', 'def', 'bca' ]);
z.push({ a: 'a', b: 'b', c: 'c' });
z.push({ a: 'a', b: 'b', c: 'd' });

그럼 간단하게 분류해!

z.smartSort('asc'); // Ascending
z.smartSort('desc'); // Descending

메서드만

간단한 방법 이외에는 이전과 동일!

/* begin */
/* KEY NOTE! Method `smartSort` is appended to native `window` for global use. If you'd prefer a more local scope, simple change `window.smartSort` to `var smartSort` and place inside your class/method */
window.smartSort=function(){if(arguments){var a,b,c;for(c in arguments)arguments[c]instanceof Array&&(a=arguments[c],void 0==b&&(b="a")),"string"==typeof arguments[c]&&(b=/^a([sc]{2})?$/i.test(arguments[c])?"a":"d");if(a instanceof Array)return a.sort("a"==b?smartSort.asc:smartSort.desc)}return this.sort()};smartSort.asc=function(a,b){if(null==a||void 0==a)return 1;if(null==b||void 0==b)return-1;var c=typeof a,e=c+typeof b;if(/^numbernumber$/ig.test(e))return a-b;if(/^stringstring$/ig.test(e))return a> b;if(/(string|number){2}/ig.test(e))return/string/i.test(c)?1:-1;if(/number/ig.test(e)&&/object/ig.test(e)||/string/ig.test(e)&&/object/ig.test(e))return/object/i.test(c)?1:-1;if(/^objectobject$/ig.test(e)){a instanceof Array&&a.sort(smartSort.asc);b instanceof Array&&b.sort(smartSort.asc);if(a instanceof Date&&b instanceof Date)return a-b;if(a instanceof Array&&b instanceof Array){var e=Object.keys(a),g=Object.keys(b),e=smartSort(e.concat(g),"a"),d;for(d in e)if(c=e[d],a[c]!=b[c])return d=smartSort([a[c], b[c]],"a"),a[c]==d[0]?-1:1;var f=smartSort([a[Object.keys(a)[0]],b[Object.keys(b)[0]]],"a");return a[Object.keys(a)[0]]==f[0]?-1:1}if(a instanceof Element&&b instanceof Element){if(a.tagName==b.tagName)return e=smartSort([a.id,b.id],"a"),a.id==e[0]?1:-1;e=smartSort([a.tagName,b.tagName],"a");return a.tagName==e[0]?1:-1}if(a instanceof Date||b instanceof Date)return a instanceof Date?1:-1;if(a instanceof Array||b instanceof Array)return a instanceof Array?-1:1;e=Object.keys(a);g=Object.keys(b);smartSort(e.concat(g), "a");for(c=0;20>c;c++){d=e[c];f=g[c];if(a.hasOwnProperty(d)&&b.hasOwnProperty(f)){if(a[d]instanceof Element&&b[f]instanceof Element){if(a[d].tagName==b[f].tagName)return c=smartSort([a[d].id,b[f].id],"a"),a[d].id==c[0]?-1:1;c=smartSort([a[d].tagName,b[f].tagName],"a");return a[d].tagName==c[0]?-1:1}if(a[d]instanceof Element||b[f]instanceof Element)return a[d]instanceof Element?1:-1;if(a[d]!=b[f])return c=smartSort([a[d],b[f]],"a"),a[d]==c[0]?-1:1}if(a.hasOwnProperty(d)&&a[d]instanceof Element)return 1; if(b.hasOwnProperty(f)&&b[f]instanceof Element||!a.hasOwnProperty(d))return-1;if(!b.hasOwnProperty(d))return 1}c=smartSort([a[Object.keys(a)[0]],b[Object.keys(b)[0]]],"a");return a[Object.keys(a)[0]]==c[0]?1:-1}g=[a,b].sort();return g[0]>g[1]};smartSort.desc=function(a,b){if(null==a||void 0==a)return 1;if(null==b||void 0==b)return-1;var c=typeof a,e=c+typeof b;if(/^numbernumber$/ig.test(e))return b-a;if(/^stringstring$/ig.test(e))return b>a;if(/(string|number){2}/ig.test(e))return/string/i.test(c)? 1:-1;if(/number/ig.test(e)&&/object/ig.test(e)||/string/ig.test(e)&&/object/ig.test(e))return/object/i.test(c)?1:-1;if(/^objectobject$/ig.test(e)){a instanceof Array&&a.sort(smartSort.desc);b instanceof Array&&b.sort(smartSort.desc);if(a instanceof Date&&b instanceof Date)return b-a;if(a instanceof Array&&b instanceof Array){var e=Object.keys(a),g=Object.keys(b),e=smartSort(e.concat(g),"a"),d;for(d in e)if(c=e[d],a[c]!=b[c])return d=smartSort([a[c],b[c]],"d"),a[c]==d[0]?-1:1;var f=smartSort([a[Object.keys(a)[0]], b[Object.keys(b)[0]]],"d");return a[Object.keys(a)[0]]==f[0]?-1:1}if(a instanceof Element&&b instanceof Element){if(a.tagName==b.tagName)return e=smartSort([a.id,b.id],"d"),a.id==e[0]?-1:1;e=smartSort([a.tagName,b.tagName],"d");return a.tagName==e[0]?-1:1}if(a instanceof Date||b instanceof Date)return a instanceof Date?1:-1;if(a instanceof Array||b instanceof Array)return a instanceof Array?-1:1;e=Object.keys(a);g=Object.keys(b);smartSort(e.concat(g),"a");for(c=0;20>c;c++){d=e[c];f=g[c];if(a.hasOwnProperty(d)&& b.hasOwnProperty(f)){if(a[d]instanceof Element&&b[f]instanceof Element){if(a[d].tagName==b[f].tagName)return c=smartSort([a[d].id,b[f].id],"d"),a[d].id==c[0]?-1:1;c=smartSort([a[d].tagName,b[f].tagName],"d");return a[d].tagName==c[0]?-1:1}if(a[d]instanceof Element||b[f]instanceof Element)return a[d]instanceof Element?1:-1;if(a[d]!=b[f])return c=smartSort([a[d],b[f]],"d"),a[d]==c[0]?-1:1}if(a.hasOwnProperty(d)&&a[d]instanceof Element)return 1;if(b.hasOwnProperty(f)&&b[f]instanceof Element)return-1; if(!a.hasOwnProperty(d))return 1;if(!b.hasOwnProperty(d))return-1}c=smartSort([a[Object.keys(a)[0]],b[Object.keys(b)[0]]],"d");return a[Object.keys(a)[0]]==c[0]?-1:1}g=[a,b].sort();return g[0]<g[1]}
/* end */

용도:

z = smartSort(z, 'asc'); // Ascending
z = smartSort(z, 'desc'); // Descending

jsFiddle 메서드 smartSort(어레이, "asc|desc")

다음 코드를 사용해 보십시오.

HTML:

<div id="demo"></div>

JavaScript 코드:

<script>
    (function(){
        var points = [40, 100, 1, 5, 25, 10];
        document.getElementById("demo").innerHTML = points;
        points.sort(function(a, b){return a-b});
        document.getElementById("demo").innerHTML = points;
    })();
</script>

이 코드를 다음과 같이 사용해 보십시오.

var a = [5, 17, 29, 48, 64, 21];
function sortA(arr) {
return arr.sort(function(a, b) {
return a - b;
})
;} 
alert(sortA(a));

TypeScript 바리안트

const compareNumbers = (a: number, b: number): number => a - b

myArray.sort(compareNumbers)

이런 종류의 것을 만들기 위해서는 어느 것이 먼저인지 확인하는 기능을 통과해야 합니다.

합니다.a.id - a.id

        const myJson = [
            { id: 1, name: 'one'},
            { id: 4, name: 'four'},
            { id: 2, name: 'two'},
            { id: 3, name: 'three'}
        ];

        // provide the sort method to check
        const myNewSort = myJson.sort(function(a, b) {
          return a.id - b.id;
        });

        console.log('my new sort',myNewSort)

간단하게 번호 배열을 정렬할 수 있습니다.

const num=[13,17,14,19,16];
let temp;
for(let i=0;i<num.length;i++){
    for(let j=i+1;j<num.length;j++){
        if(num[i]>num[j]){
            temp=num[i]
            num[i]=num[j]
            num[j]=temp
        }
    }
}

console.log(num);

정렬_혼합

Object.defineProperty(Array.prototype,"sort_mixed",{
    value: function () { // do not use arrow function
        var N = [], L = [];
        this.forEach(e => {
            Number.isFinite(e) ? N.push(e) : L.push(e);
        });
        N.sort((a, b) => a - b);
        L.sort();
        [...N, ...L].forEach((v, i) => this[i] = v);
        return this;
    })

해보다a =[1,'u',"V",10,4,"c","A"].sort_mixed(); console.log(a)

가 안 가는 사람이 Array.sort()정수로 동작합니다.이 답을 읽어주세요.

알파벳 순서:

기본적으로는 sort() 메서드는 값을 알파벳 및 오름차순으로 문자열로 정렬합니다.

const myArray = [104, 140000, 99];
myArray.sort();
console.log(myArray); // output is [104, 140000, 99]

오름차순:

const myArray = [104, 140000, 99];
myArray.sort(function(a, b){
  return a - b;
});
console.log(myArray); // output is [99, 104, 140000]

w3schools로부터의 설명:

compareFunction에 대체 정렬 순서를 정의합니다.함수는 인수(function(a, b){return a-b} 등)에 따라 음수, 0 또는 양의 값을 반환해야 합니다.sort() 메서드는 두 값을 비교할 때 값을 비교 함수로 전송하고 반환된 값(음수, 0, 양수)에 따라 정렬합니다.

예제:

40과 100을 비교할 때 sort() 메서드는 비교 함수(40,100)를 호출합니다.

함수는 40-100을 계산하고 -60(음수 값)을 반환합니다.

sort 함수는 100보다 작은 값으로 40을 정렬합니다.

다음을 포함한 내림차순:

const myArray = [104, 140000, 99];
myArray.sort(function(a, b){
  return b - a;
});
console.log(myArray); // output is [140000, 104, 99]

에는 번에계계로 계산했습니다.b - a반환하는 (즉,

max()와 min()의 삽입 함수를 사용하면 높이와 최소값을 얻을 수 있습니다.

var numArray = [140000, 104, 99];
console.log(Math.max(...numArray));
console.log(Math.min(...numArray));

오름차순 또는 내림차순으로 정렬할 경우

numArray.sort((a, b)=> a - b);

자세한 것은 이쪽

문자열 목록에서 가장 큰 charCodeAt를 계산하고 정렬해야 하는 경우 이것이 올바른 방법입니다.

const arrayLines = '1.1.1.1\n1.0.1.1\n1.1.1.2\n1.1.1.0'.split('\n');

// Response: (4) ['1.0.1.1', '1.1.1.0', '1.1.1.1', '1.1.1.2']
arrayLines.sort((a, b) => {
    let a_charCodeSize = 0,
        b_charCodeSize = 0;

    // Loop true a & b characters and calculate the charCodeAt size.
    for (const aChar of a) a_charCodeSize += aChar.charCodeAt(0);
    for (const bChar of b) b_charCodeSize += bChar.charCodeAt(0);

    return a_charCodeSize - b_charCodeSize;
});

정렬 메서드는 배열 요소를 문자열로 변환합니다.따라서 아래 방법에서는 배열 요소가 있는 10진수에도 문제가 없습니다.

let productPrices = [10.33, 2.55, 1.06, 5.77];
console.log(productPrices.sort((a,b)=>a-b));

그리고 예상한 결과를 얻을 수 있습니다.

정수 > 0을 정렬하여 상자 밖에서 생각하십시오.

function sortArray(arr) {
  return new Promise((resolve) => {
    const result = []
    arr.forEach((item) => {
      setTimeout(() => {
        result.push(item)
        if (result.length === arr.length) resolve(result)
      }, item)
    })
  })
}

sortArray([4, 2, 42, 128, 56, 2]).then((result) => {
  document.write(JSON.stringify(result))
})

이 방법은 생산적으로 사용해서는 안 되며, 이 경우에 더 적합합니다. 다른 답변을 확인하십시오.

언급URL : https://stackoverflow.com/questions/1063007/how-to-sort-an-array-of-integers-correctly

반응형