mUpdate

mUpdate

  • (mapperFns: MapperFns) => (collection: EntryCollection) => collection
  1. Update matching entries via mapper functions

    Consider update instead.
    This is for the uncommon case where mutating collection is required.

    const obj = { a: 1, b: 2, c: 3 }
    const inc = n => n + 1
    const dec = n => n - 1
    const updateAandC = mUpdate({ a: inc, c: dec })
    
    const mutatedObj = updateAandC(obj)
    console.log(mutatedObj === obj) // is true
    console.log(obj)
    // is {
    //   a: 2
    //   b: 2
    //   c: 2
    // }
    const obj = { a: 1, b: 2, c: 3 }
    const inc = (n: number) => n + 1
    const dec = (n: number) => n - 1
    const updateAandC = mUpdate({ a: inc, c: dec })
    
    const mutatedObj = updateAandC(obj)
    console.log(mutatedObj === obj) // is true
    console.log(obj)
    // is {
    //   a: 2
    //   b: 2
    //   c: 2
    // }
    
    const obj = { a: 1, b: 2, c: 3 }
    const inc = n => n + 1
    const dec = n => n - 1
    const updateAandC = mUpdate({ a: inc, c: dec })
    
    const mutatedObj = updateAandC(obj)
    console.log(mutatedObj === obj) // is true
    console.log(obj)
    // is {
    //   a: 2
    //   b: 2
    //   c: 2
    // }
    const obj = { a: 1, b: 2, c: 3 }
    const inc = (n: number) => n + 1
    const dec = (n: number) => n - 1
    const updateAandC = mUpdate({ a: inc, c: dec })
    
    const mutatedObj = updateAandC(obj)
    console.log(mutatedObj === obj) // is true
    console.log(obj)
    // is {
    //   a: 2
    //   b: 2
    //   c: 2
    // }
    
  2. Sometimes we want to mutate entries by updating their values. Below, we are coding a gifting feature on our audiobook platform. Let's test it by gifting Cat's Cradle to Luke.

    const friend = {
      name: 'luke',
      books: ['Player Piano'],
    }
    
    const addCatsCradle = mAppendOne("Cat's Cradle")
    const giftCatsCradleTo = mUpdate({ books: addCatsCradle })
    
    giftCatsCradleTo(friend)
    console.log(friend)
    // is {
    //   name: luke
    //   books: [Player Piano, Cat's Cradle]
    // }
    type Account = {
      name: string
      books: string[]
    }
    const friend: Account = {
      name: 'luke',
      books: ['Player Piano'],
    }
    
    const addCatsCradle = mAppendOne("Cat's Cradle")
    const giftCatsCradleTo = mUpdate({ books: addCatsCradle })<Account>
    
    giftCatsCradleTo(friend)
    console.log(friend)
    // is {
    //   name: luke
    //   cart: [cozy gloves, alligator socks
    // }
    
    const friend = {
      name: 'luke',
      books: ['Player Piano'],
    }
    
    const addCatsCradle = mAppendOne("Cat's Cradle")
    const giftCatsCradleTo = mUpdate({
      books: addCatsCradle,
    })
    
    giftCatsCradleTo(friend)
    console.log(friend)
    // is {
    //   name: luke
    //   books: [Player Piano, Cat's Cradle]
    // }
    type Account = {
      name: string
      books: string[]
    }
    const friend: Account = {
      name: 'luke',
      books: ['Player Piano'],
    }
    
    const addCatsCradle = mAppendOne("Cat's Cradle")
    const giftCatsCradleTo = mUpdate({
      books: addCatsCradle,
    })<Account>
    
    giftCatsCradleTo(friend)
    console.log(friend)
    // is {
    //   name: luke
    //   cart: [cozy gloves, alligator socks
    // }
    
  3. An array or map of mapperFns can only update a respective array or map. An object, on the other hand, can update any EntryCollection.

    Below shows the array validation.

    const inc = n => n + 1
    const dec = n => n - 1
    
    const updateFirstTwo = mUpdate([inc, dec])
    const arr = [1, 5, 3]
    updateFirstTwo(arr)
    console.log(arr) // is [2, 4, 3]
    
    const obj = { a: 1 }
    try {
      updateFirstTwo(obj)
    } catch (err) {
      console.log(err)
      // prints
      // mUpdate requires argument 'collection' to be an array since you passed an
      // array for 'mapperFns'
    }
    const inc = (n: number) => n + 1
    const dec = (n: number) => n - 1
    
    const updateFirstTwo = mUpdate([inc, dec])
    const arr = [1, 5, 3]
    updateFirstTwo(arr)
    console.log(arr) // is [2, 4, 3]
    
    const obj = { a: 1 }
    updateFirstTwo(obj) // ts requires an array
    
    const inc = n => n + 1
    const dec = n => n - 1
    
    const updateFirstTwo = mUpdate([inc, dec])
    const arr = [1, 5, 3]
    updateFirstTwo(arr)
    console.log(arr) // is [2, 4, 3]
    
    const obj = { a: 1 }
    try {
      updateFirstTwo(obj)
    } catch (err) {
      console.log(err)
      // prints
      // mUpdate requires argument 'collection' to be
      // an array since you passed an array for
      // 'mapperFns'
    }
    const inc = (n: number) => n + 1
    const dec = (n: number) => n - 1
    
    const updateFirstTwo = mUpdate([inc, dec])
    const arr = [1, 5, 3]
    updateFirstTwo(arr)
    console.log(arr) // is [2, 4, 3]
    
    const obj = { a: 1 }
    updateFirstTwo(obj) // ts requires an array