From 6e9935bf144145c574dd9fcc2a86843672c9d01c Mon Sep 17 00:00:00 2001 From: Heorhii Minesko Date: Sun, 25 Jan 2026 11:31:47 +0200 Subject: [PATCH 1/3] task solved --- .github/workflows/test.yml-template | 23 +++++++++++++++++ package-lock.json | 9 ++++--- package.json | 2 +- src/arrayMethodSort.js | 39 +++++++++++++++++++++++++++-- 4 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/test.yml-template diff --git a/.github/workflows/test.yml-template b/.github/workflows/test.yml-template new file mode 100644 index 00000000..bb13dfc4 --- /dev/null +++ b/.github/workflows/test.yml-template @@ -0,0 +1,23 @@ +name: Test + +on: + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test diff --git a/package-lock.json b/package-lock.json index eadb3115..84d432db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "GPL-3.0", "devDependencies": { "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", @@ -1467,10 +1467,11 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.6.tgz", - "integrity": "sha512-b4om/whj4G9emyi84ORE3FRZzCRwRIesr8tJHXa8EvJdOaAPDpzcJ8A0sFfMsWH9NUOVmOwkBtOXDu5eZZ00Ig==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", + "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/rest": "^17.11.2", "@types/get-port": "^4.2.0", diff --git a/package.json b/package.json index 9c0b7bbd..0827621b 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "license": "GPL-3.0", "devDependencies": { "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", diff --git a/src/arrayMethodSort.js b/src/arrayMethodSort.js index 32363d0d..556dec65 100644 --- a/src/arrayMethodSort.js +++ b/src/arrayMethodSort.js @@ -4,8 +4,43 @@ * Implement method Sort */ function applyCustomSort() { - [].__proto__.sort2 = function(compareFunction) { - // write code here + [].__proto__.sort2 = function (compareFunction) { + let sortFunction = compareFunction; + const records = this.map((item, i) => { + return { val: item, key: String(item), ind: i }; + }); + + const defaultComparator = (a, b) => { + if (a > b) { + return 1; + } + + if (a < b) { + return -1; + } + + return 0; + }; + + if (sortFunction === undefined) { + sortFunction = defaultComparator; + } + + for (let i = 0; i < records.length; i++) { + for (let j = 0; j < records.length - 1 - i; j++) { + const result = sortFunction(records[j].key, records[j + 1].key); + + if (result > 0) { + [records[j], records[j + 1]] = [records[j + 1], records[j]]; + } + } + } + + for (let i = 0; i < records.length; i++) { + this[i] = records[i].val; + } + + return this; }; } From 0ebc6629046cd599544d1af6a4be5aaac0e48ef2 Mon Sep 17 00:00:00 2001 From: Heorhii Minesko Date: Sun, 25 Jan 2026 12:40:39 +0200 Subject: [PATCH 2/3] fixed edge cases --- src/arrayMethodSort.js | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/arrayMethodSort.js b/src/arrayMethodSort.js index 556dec65..010528dd 100644 --- a/src/arrayMethodSort.js +++ b/src/arrayMethodSort.js @@ -6,16 +6,15 @@ function applyCustomSort() { [].__proto__.sort2 = function (compareFunction) { let sortFunction = compareFunction; - const records = this.map((item, i) => { - return { val: item, key: String(item), ind: i }; - }); - const defaultComparator = (a, b) => { - if (a > b) { + const stringA = String(a); + const stringB = String(b); + + if (stringA > stringB) { return 1; } - if (a < b) { + if (stringA < stringB) { return -1; } @@ -26,20 +25,16 @@ function applyCustomSort() { sortFunction = defaultComparator; } - for (let i = 0; i < records.length; i++) { - for (let j = 0; j < records.length - 1 - i; j++) { - const result = sortFunction(records[j].key, records[j + 1].key); + for (let i = 0; i < this.length; i++) { + for (let j = 0; j < this.length - 1 - i; j++) { + const result = sortFunction(this[j], this[j + 1]); if (result > 0) { - [records[j], records[j + 1]] = [records[j + 1], records[j]]; + [this[j], this[j + 1]] = [this[j + 1], this[j]]; } } } - for (let i = 0; i < records.length; i++) { - this[i] = records[i].val; - } - return this; }; } From dab6fa5290fd8d00d31c6ead51af7055d4533eae Mon Sep 17 00:00:00 2001 From: Heorhii Minesko Date: Sun, 25 Jan 2026 13:19:52 +0200 Subject: [PATCH 3/3] fixed handling empty slots --- src/arrayMethodSort.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/arrayMethodSort.js b/src/arrayMethodSort.js index 010528dd..fe8ebe61 100644 --- a/src/arrayMethodSort.js +++ b/src/arrayMethodSort.js @@ -27,10 +27,18 @@ function applyCustomSort() { for (let i = 0; i < this.length; i++) { for (let j = 0; j < this.length - 1 - i; j++) { - const result = sortFunction(this[j], this[j + 1]); - - if (result > 0) { + if (!(j in this) && j + 1 in this) { [this[j], this[j + 1]] = [this[j + 1], this[j]]; + } else if (j in this && !(j + 1 in this)) { + continue; + } else if (!(j in this) && !(j + 1 in this)) { + continue; + } else { + const result = sortFunction(this[j], this[j + 1]); + + if (result > 0) { + [this[j], this[j + 1]] = [this[j + 1], this[j]]; + } } } }