Update sortedLastIndex, add sortedIndexBy, sortedLastIndexBy

This commit is contained in:
Angelos Chalaris
2018-01-26 13:39:09 +02:00
parent 97d336fd41
commit 3a0458b2d6
4 changed files with 47 additions and 4 deletions

19
snippets/sortedIndexBy.md Normal file
View File

@ -0,0 +1,19 @@
### sortedIndexBy
Returns the lowest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
Check if the array is sorted in descending order (loosely).
Use `Array.findIndex()` to find the appropriate index where the element should be inserted, based on the iterator function `fn`.
```js
const sortedIndexBy = (arr, n, fn) => {
const isDescending = fn(arr[0]) > fn(arr[arr.length - 1]);
const val = fn(n);
const index = arr.findIndex(el => (isDescending ? val >= fn(el) : val <= fn(el)));
return index === -1 ? arr.length : index;
};
```
```js
sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, o => o.x); // 0
```

View File

@ -4,16 +4,16 @@ Returns the highest index at which value should be inserted into array in order
Check if the array is sorted in descending order (loosely). Check if the array is sorted in descending order (loosely).
Use `Array.map()` to map each element to an array with its index and value. Use `Array.map()` to map each element to an array with its index and value.
Use `Array.filter()` to find all possible positions where the element could be inserted, `Array.slice(-1)` to get the last one. Use `Array.reverse()` and `Array.findIndex()` to find the appropriate last index where the element should be inserted.
```js ```js
const sortedLastIndex = (arr, n) => { const sortedLastIndex = (arr, n) => {
const isDescending = arr[0] > arr[arr.length - 1]; const isDescending = arr[0] > arr[arr.length - 1];
const index = arr const index = arr
.map((val, i) => [i, val]) .map((val, i) => [i, val])
.filter(el => (isDescending ? n >= el[1] : n >= el[1])) .reverse()
.slice(-1)[0][0]; .findIndex(el => (isDescending ? n <= el[1] : n >= el[1]));
return index === -1 ? arr.length : index; return index === -1 ? 0 : arr.length - index - 1;
}; };
``` ```

View File

@ -0,0 +1,22 @@
### sortedLastIndexBy
Returns the highest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
Check if the array is sorted in descending order (loosely).
Use `Array.reverse()` and `Array.findIndex()` to find the appropriate last index where the element should be inserted, based on the iterator function `fn`..
```js
const sortedLastIndexBy = (arr, n, fn) => {
const isDescending = fn(arr[0]) > fn(arr[arr.length - 1]);
const val = fn(n);
const index = arr
.map((val, i) => [i, fn(val)])
.reverse()
.findIndex(el => (isDescending ? val <= el[1] : val >= el[1]));
return index === -1 ? 0 : arr.length - index;
};
```
```js
sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, o => o.x); // 1
```

View File

@ -206,7 +206,9 @@ size:object,array,string
sleep:function,promise sleep:function,promise
sortCharactersInString:string sortCharactersInString:string
sortedIndex:array,math sortedIndex:array,math
sortedIndexBy:array,math,function
sortedLastIndex:array,math sortedLastIndex:array,math
sortedLastIndexBy:array,math,function
splitLines:string splitLines:string
spreadOver:adapter spreadOver:adapter
standardDeviation:math,array standardDeviation:math,array