0.1.1 • Published 3 years ago

@hippie/im v0.1.1

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

im

生成 immutable 对象

API

  • set(obj, path: string | string[], value: any)
  • del(obj, path: string | string[])
  • push(obj, path: string | string[], value: any)
  • pop(obj, path: string | string[])
  • shift(obj, path: string | string[])
  • unshift(obj, path: string | string[], value: any)
  • reverse(obj, path: string | string[])
  • splice(obj, path: string | string[], i: number, count: number, ...items: any[])
  • sort(obj, path: string | string[], fn?: (a, b) => number)
  • assign(obj, path: string | string[], value)
  • merge(obj, path: string | string[], value)

例子

const obj = {
  name: 'tom',
  data: {
    score: 100,
    age: 20,
    d: {
      abc: 12,
    },
  },
  info: {
    a: 1,
    list: [1, 2, 3, 4, 5],
  },
}

const obj2 = set(obj, 'data.age', 30)
obj2 === obj // false
obj2.name === 'tom' // true
obj2.data === obj.data // false
obj2.data.score === 1000 // true
obj2.data.age === 30 // true
obj2.data.d === obj.data.d // true
obj2.info === obj.info // true

const obj3 = del(obj, 'data.name')
obj3 === obj // false
obj3.delete === undefined // true
obj3.data === obj.data // true
obj3.data.d === obj.data.d // true
obj3.info === obj.info // true

const a = { a: 2, b: 3 }
const obj4 = assign(obj, 'info', a)
obj4 === obj // false
obj4.name === 'tom' // true
obj4.data === obj.data // true
obj4.info === obj.info // false
obj4.info.a === 2 // true
obj4.info.b === 3 // true
obj4.list = obj.info.list // true

const b = {
  gender: 'male',
  data: {
    age: 30,
    abc: 999,
  },
  tree: [123],
}

const obj5 = merge(obj, b)
obj5 === obj // false
obj5.name === 'tom' // true
obj5.gender === 'male' // true
obj5.data === obj.data //false
obj5.data.d === obj.data.d // true
obj5.data.score === 100 // true
obj5.data.age === 30 // true
obj5.data.abc === 999 // true