Comments (2)
@binury - thank you very much, that works perfectly!
Are you thinking of creating a PR to the main readme? No worries if not as folks could find this as a useful reference. Appreciate your help
from you-dont-need-lodash-underscore.
Yeah if you look at what set is doing, you'll see it is a bit heavy handed π₯ With all the "safety checks" and flexibility and edge cases, it's probably ~150 LoC across half a dozen files.
A mvp bare set, as a partner to get
(basically), would be something likeβ¦
`
/**
* @param {Object} obj
* We'll make assumptions about path in order to avoid reimplementing
* https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts
* @param {Array|string} path
* @param {*} value
* @returns {Object} Returns obj
*/
function set(obj, path, value) {
path = Array.isArray(path) ? path.join('.') : path;
const paths = path
.split('.')
.map((p) => (isNaN(parseInt(p, 10)) ? p : parseInt(p, 10)));
const lastIndex = paths.length - 1;
let nested = obj;
for (const [i, p] of paths.entries()) {
if (i === lastIndex) {
nested[p] = value;
} else {
nested =
nested[p] || (nested[p] = typeof paths[i + 1] === 'number' ? [] : {});
}
}
return obj;
}
const person = {
birth: {
dateTime: '',
location: {
state: 'CA',
city: 'Los Angeles',
hospital: {
name: '',
},
},
},
};
set(person, ['birth', 'location', 'hospital', 'name'], 'Hollywood Pediatrics');
set(person, 'vehicle.manufacturer', 'Toyota');
set(person, 'parents.0.name', 'John Doe');
console.log(person);
/*
{
birth: {
dateTime: '',
location: { state: 'CA', city: 'Los Angeles', hospital: [Object] }
},
vehicle: { manufacturer: 'Toyota' },
parents: [ { name: 'John Doe' } ]
}
*/
from you-dont-need-lodash-underscore.
Related Issues (20)
- Why don't you use `instanceof` for `isDate`? HOT 4
- Add entry for _.shuffle HOT 6
- Is the _.keyBy collectionKeyBy function correct?
- Warning for isEmpty in WebStorm HOT 4
- `debounce` function is wrong implementation HOT 1
- Suggest structuredClone as a replacement for cloneDeep
- Package it and publish to NPM. HOT 2
- _.truncate ??? HOT 1
- Purpose of this repo HOT 2
- Array.prototype.at() was introduced in Node.js v16 HOT 1
- Add entry for _.isPlainObject HOT 1
- Guide: Creating Valid Substitutions for Lodash Functions HOT 1
- missing `_.merge` ?
- Add `findLast` and `findLastIndex` HOT 1
- Add entry for _.identity HOT 1
- chunk example is slower than lodash's chunk
- _.pick example is incorrect when some specified key doesn't exist HOT 4
- Support eslint flat config HOT 1
- Repository misconfiguration: test Actions workflow should not require PR approval
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from you-dont-need-lodash-underscore.