Comments (12)
Object.assign()
and { ...obj }
are both ES6 and both work as far as shallow cloning goes (different techniques). Unless you can provide an argument why one of them is better than the other (performance or semantics or side-effects), we will sit here all day debating which one to use. So we better come up with an argument which one is the de-facto implementation and then update the snippet.
I want to keep the shallow clone snippet at all costs, as it is something that many new developers struggle with, so even if it is dead simple, it is helpful.
from 30-seconds-of-code.
The object spreads operator is slightly faster than Object.assign()
, but it's not as well-supported. I'll close the issue and switch the current snippet to use Object.assign()
for better support.
from 30-seconds-of-code.
@skatcat31 careful, that makes merge
a global variable
(() => {
const shallowClone = merge = (...args) => Object.assign({},...args);
})();
console.log(merge); // no error
from 30-seconds-of-code.
Well shallowClone
implies it's just cloning one object, not assigning the properties of several into one. It's also a utility because it's shorter than Object.assign. There are other utilities like head of list that are like that.
from 30-seconds-of-code.
how is shallowClone shorter than Object.assign?
from 30-seconds-of-code.
ugh tried ot clear out a comment, ignore the toggle
from 30-seconds-of-code.
I believe that { ...obj }
is actually not in the standard yet, it's a stage-3 proposal. I think it will be ES2018.
from 30-seconds-of-code.
@atomiks in that case send a PR with the change to use Object.assign()
(after you've double-checked) and I'll merge it.
from 30-seconds-of-code.
Well it's implemented in browsers and babel, so I think it's fine to use. But it's not from ES6.
from 30-seconds-of-code.
- Performance tests should indicate if we have a reason not to.
- Browser coverage should indicate if we have a strong argument against one of the two.
(I don't have the time to check either one right now, maybe later)
from 30-seconds-of-code.
PS after thoughts(do not reopen)
You might want to create a hanging issue about changing it to the spread operator once fully supported then. I like Object.assign
a little better because you can make two functions with the exact same footprint:
const shallowClone = merge = (...args) => Object.assign({},...args)
but that's hardly a reason to keep one over the other unless we want to show that you can also define two things to point at the same reference by chaining, but then shallowClone becomes overloaded
from 30-seconds-of-code.
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for any follow-up tasks.
from 30-seconds-of-code.
Related Issues (20)
- Merge two arrays and remove duplicate elements HOT 2
- CSVToArray will return an empty item for documents ending with \n HOT 2
- addDaysToDate fails with non-UTC timezone HOT 1
- A snippet folder dedicated to Angular
- Js
- Broken links HOT 4
- New snippet ideas HOT 1
- passive-scroll-listener-performance has obsolete/incorrect advice HOT 2
- Regarding the throttle function's question. HOT 7
- style: Centering the footer section ⏡ HOT 2
- Website Navigation Bar
- cookie parsing containing a `=` in value HOT 5
- [ BUG ] Missing space in footer section HOT 12
- Typo in the event-loop-explained.md snippet HOT 2
- fix: Unnecessary parameter in Queue class methods HOT 2
- Terminology issue in blog HOT 4
- :bug: Fix Footer settingsPath (GithHub,CC ,30-sec-of-code Link)
- Kindly add hacktoberfest label to your repo. HOT 1
- [Feature Request] : The border of search bar is not clearly visible .
- Typo on the website
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 30-seconds-of-code.