Spread syntax can be used when all elements from an object or array need to be included in a list of some kind.
(c) MDN
🐊Putout plugin adds ability to transform spread syntax.
npm i @putout/plugin-spread
- ✅ convert-apply-to-spread;
- ✅ convert-convert-object-assign-to-merge-spread;
- ✅ simplify-nested;
- ✅ remove-useless-array;
- ✅ remove-useless-object;
{
"rules": {
"spread/convert-apply-to-spread": "on",
"spread/convert-object-assign-to-merge-spread": "on",
"spread/remove-useless-array": "on",
"spread/remove-useless-object": "on",
"spread/simplify-nested": "on"
}
}The
Object.assign()method copies all enumerable own properties from one or more source objects to a target object and returns the modified target object.Spread syntax (
...) allows an object expression to be expanded in places where zero or more key-value pairs are expected.(c) MDN
Convert Object.assign() to merge spread since it shorter but does (mostly) the same.
function merge(a) {
return Object.assign({}, a, {
hello: 'world',
});
}function merge(a) {
return {
...a,
hello: 'world',
};
}| Linter | Rule | Fix |
|---|---|---|
| 🐊 Putout | spread/convert-object-assign-to-merge-spread |
✅ |
| ⏣ ESLint | prefer-object-spread |
✅ |
The thing is [...b] can be used for:
- copying an array;
- converting different value type like
stringto anarray.
So better to be more concrete and use slice for copying and Array()/Array.from() for converting to decrease cognitive load.
Also sometimes there is no need on any of this operations, and we can drop spread.
for (const a of [...b]) {}
const places = [...getPlaces()];for (const a of b) {}
const places = getPlaces();
// Array constructor creates sparse array
[...Array(5)].map(Number);const a = {
...fn(),
};const a = fn();Checkout in 🐊Putout Editor.
[
...[
...a,
...b,
],
...x,
];[
...a,
...b,
...x,
];Spread syntax (
...) allows an array expression to be expanded in places where zero or more arguments are expected.(c) MDN
console.apply(null, arguments);console.log(...arguments);MIT