Objects are passed by reference, are mutable, and can be modified by our functions:
function rotateLeft(arr, num) {
for (let i = 0 ; i < num; i++) {
let el = arr.pop();
arr.unshift(el);
}
}
let myArr = [1, 2, 3, 4, 5,];
rotateLeft(myArr, 2);
console.log(myArr);
Strings are passed by value, are immutable, and a new array is constructedd and returned, because it cannot be changed in place.
function rotateString(str, num) {
return str.slice(num) + str.slice(0, num);
}
let str = "foobar";
let ret = rotateString(str, 3);
console.log(str);
console.log(ret);
To dereference an array, use let [var1, var2]
syntax.
To dereference attributes from an object, use let {}
syntax.
let me = {
name: "Ian",
instruments: ['bass', 'synth', 'guitar'],
siblings: {
brothers: ['Alistair'],
sisters: ['Meghan']
}
}
let { name, instruments: musical_instruments, siblings: {sisters}} = me;
console.log(sisters);
function printInstruments({ instruments } ) { console.log(instruments); } printInstruments(me);
function printSiblings({ siblings: {sisters, brothers}}) { console.log(“Sisters”, sisters); console.log(“Brothers”, brothers); }
printSiblings(me);
//rest parameters // combines parameters into array
…parameterName
splice is an example of where we’ve seen this before
let arr = ‘my dog has fleas’.split(’ ‘); arr.splice(3, 1, ’trees’)
//spread operator // take an arrray and spread them into arguments
…argContainer
OR
// take an object or array and spread their elements/attributes into another object or array
function multiply(multiplier, …theArgs) { return theArgs.map(function(element) { return multiplier * element }) }
let arr = multiply(2, 1, 2, 3) console.log(arr)
let me = { name: “Ian”, instruments: [‘bass’, ‘synth’, ‘guitar’], siblings: { brothers: [‘Alistair’], sisters: [‘Meghan’] } }
let countryArr = [‘USA’, ‘Canada’, ‘UK’]; //me[countries] = countryArr;
let myCountries = { ‘countries’: countryArr };
let newMe = {…me, …countries}