Add mapString, fix dig
This commit is contained in:
@ -5,7 +5,7 @@ Returns the target value in a nested JSON object, based on the given key.
|
||||
Use the `in` operator to check if `target` exists in `obj`.
|
||||
If found, return the value of `obj[target]`, otherwise use `Object.values(obj)` and `Array.reduce()` to recursively call `dig` on each nested object until the first matching key/value pair is found.
|
||||
|
||||
```
|
||||
```js
|
||||
const dig = (obj, target) =>
|
||||
target in obj
|
||||
? obj[target]
|
||||
@ -17,7 +17,7 @@ const dig = (obj, target) =>
|
||||
}, undefined);
|
||||
```
|
||||
|
||||
```
|
||||
```js
|
||||
const data = {
|
||||
level1:{
|
||||
level2:{
|
||||
|
||||
16
snippets/mapString.md
Normal file
16
snippets/mapString.md
Normal file
@ -0,0 +1,16 @@
|
||||
### mapString
|
||||
|
||||
Creates a new string with the results of calling a provided function on every character in the calling string.
|
||||
|
||||
Use `String.split('')` and `Array.map()` to call the provided function, `fn`, for each character in `str`.
|
||||
Use `Array.join('')` to recombine the array of characters into a string.
|
||||
The callback function, `fn`, takes three arguments (the current character, the index of the current character and the string `mapString` was called upon).
|
||||
|
||||
```js
|
||||
const mapString = (str, fn) =>
|
||||
str.split('').map((c, i) => fn(c, i, str)).join('');
|
||||
```
|
||||
|
||||
```js
|
||||
mapString('lorem ipsum', c => c.toUpperCase()); // 'LOREM IPSUM'
|
||||
```
|
||||
@ -162,6 +162,7 @@ lowercaseKeys:object
|
||||
luhnCheck:math,utility
|
||||
mapKeys:object,function
|
||||
mapObject:array,object,advanced
|
||||
mapString:string,array,function,utility
|
||||
mapValues:object,function
|
||||
mask:string,utility,regexp
|
||||
matches:object,type
|
||||
|
||||
@ -4,12 +4,7 @@ const dig = (obj, target) =>
|
||||
: Object
|
||||
.values(obj)
|
||||
.reduce((acc, val) => {
|
||||
if (acc !== undefined) {
|
||||
return acc;
|
||||
}
|
||||
if (typeof val === "object") {
|
||||
return dig(val, target);
|
||||
}
|
||||
if (acc !== undefined) return acc;
|
||||
if (typeof val === 'object') return dig(val, target);
|
||||
}, undefined);
|
||||
|
||||
module.exports = dig;
|
||||
3
test/mapString/mapString.js
Normal file
3
test/mapString/mapString.js
Normal file
@ -0,0 +1,3 @@
|
||||
const mapString = (str, fn) =>
|
||||
str.split('').map((c, i) => fn(c, i, str)).join('');
|
||||
module.exports = mapString;
|
||||
20
test/mapString/mapString.test.js
Normal file
20
test/mapString/mapString.test.js
Normal file
@ -0,0 +1,20 @@
|
||||
const expect = require('expect');
|
||||
const mapString = require('./mapString.js');
|
||||
|
||||
test('mapString is a Function', () => {
|
||||
expect(mapString).toBeInstanceOf(Function);
|
||||
});
|
||||
|
||||
test('mapString returns a capitalized string', () => {
|
||||
expect(mapString('test', c => c.toUpperCase())).toBe('TEST');
|
||||
});
|
||||
|
||||
const indexMapper = (c, i) => `${c}[${i}]`;
|
||||
test('mapString can deal with indexes', () => {
|
||||
expect(mapString('test', indexMapper)).toBe('t[0]e[1]s[2]t[3]');
|
||||
});
|
||||
|
||||
const fullStringMapper = (c, i, str) => `{${str}}${c}[${i}]`;
|
||||
test('mapString can deal with the full string', () => {
|
||||
expect(mapString('test', fullStringMapper)).toBe('{test}t[0]{test}e[1]{test}s[2]{test}t[3]');
|
||||
});
|
||||
3085
test/testlog
3085
test/testlog
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user