Mutability

Mutability && Primitive && Reference Examples

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);

Dereferencing

Arrays

To dereference an array, use let [var1, var2] syntax.

let arr = ['one', 'two', 'three'];

let [first] = arr;
console.log(first);

Objects

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}

Last updated