diff --git a/1-js/05-data-types/05-array-methods/11-array-unique/_js.view/solution.js b/1-js/05-data-types/05-array-methods/11-array-unique/_js.view/solution.js index d15cea2c7e..8201328901 100644 --- a/1-js/05-data-types/05-array-methods/11-array-unique/_js.view/solution.js +++ b/1-js/05-data-types/05-array-methods/11-array-unique/_js.view/solution.js @@ -1,11 +1,7 @@ function unique(arr) { - let result = []; + const uniqueArr = []; + + arr.forEach(item => uniqueArr.includes(item) ? null : uniqueArr.push(item)); + return uniqueArr; - for (let str of arr) { - if (!result.includes(str)) { - result.push(str); - } - } - - return result; } diff --git a/1-js/05-data-types/05-array-methods/11-array-unique/solution.md b/1-js/05-data-types/05-array-methods/11-array-unique/solution.md index b9d627a0a3..6298e9bdea 100644 --- a/1-js/05-data-types/05-array-methods/11-array-unique/solution.md +++ b/1-js/05-data-types/05-array-methods/11-array-unique/solution.md @@ -4,15 +4,11 @@ Let's walk the array items: ```js run demo function unique(arr) { - let result = []; + const result = []; - for (let str of arr) { - if (!result.includes(str)) { - result.push(str); - } - } + arr.forEach(item => result.includes(item) ? null : result.push(item)); + return result; - return result; } let strings = ["Hare", "Krishna", "Hare", "Krishna", @@ -30,7 +26,7 @@ So if there are `100` elements in `result` and no one matches `str`, then it wil That's not a problem by itself, because JavaScript engines are very fast, so walk `10000` array is a matter of microseconds. -But we do such test for each element of `arr`, in the `for` loop. +But we do such test for each element of `arr`, in the `forEach` method. So if `arr.length` is `10000` we'll have something like `10000*10000` = 100 millions of comparisons. That's a lot. diff --git a/1-js/05-data-types/05-array-methods/3-filter-range-in-place/_js.view/solution.js b/1-js/05-data-types/05-array-methods/3-filter-range-in-place/_js.view/solution.js index 488db3755b..c6ec0e5567 100644 --- a/1-js/05-data-types/05-array-methods/3-filter-range-in-place/_js.view/solution.js +++ b/1-js/05-data-types/05-array-methods/3-filter-range-in-place/_js.view/solution.js @@ -1,14 +1,8 @@ function filterRangeInPlace(arr, a, b) { - for (let i = 0; i < arr.length; i++) { - let val = arr[i]; - - // remove if outside of the interval - if (val < a || val > b) { - arr.splice(i, 1); - i--; - } - } + arr + .filter(value => value < a || value > b) + .forEach(value => arr.splice(arr.indexOf(value), 1)); } diff --git a/1-js/05-data-types/05-array-methods/3-filter-range-in-place/solution.md b/1-js/05-data-types/05-array-methods/3-filter-range-in-place/solution.md index 36e3130ff0..41003bb30a 100644 --- a/1-js/05-data-types/05-array-methods/3-filter-range-in-place/solution.md +++ b/1-js/05-data-types/05-array-methods/3-filter-range-in-place/solution.md @@ -1,15 +1,9 @@ ```js run demo function filterRangeInPlace(arr, a, b) { - for (let i = 0; i < arr.length; i++) { - let val = arr[i]; - - // remove if outside of the interval - if (val < a || val > b) { - arr.splice(i, 1); - i--; - } - } + arr + .filter(value => value < a || value > b) + .forEach(value => arr.splice(arr.indexOf(value), 1)); }