mappingjs
v2.0.0
Published
Objects mapping for javascript. [Omi MVVM](https://github.com/Tencent/omi/blob/master/tutorial/omi-mvvm.md)'s best partner.
Downloads
11
Readme
Mappingjs
Objects mapping for javascript. Omi MVVM's best partner.
Install
npm i mappingjs
Usage
class TodoItem {
constructor(text, completed) {
this.text = text
this.completed = completed || false
this.author = {
firstName: 'dnt',
lastName: 'zhang'
}
}
}
const res = mapping(new TodoItem('task'), { author: { other: 'lei' } })
deepEqual(res, {
author: {
firstName: 'dnt',
lastName: 'zhang',
other: 'lei'
},
completed: false,
text: 'task'
})
Auto Mapping with rule
class TodoItem {
constructor(text, completed) {
this.text = text
this.completed = completed || false
this.author = {
firstName: 'dnt',
lastName: 'zhang'
}
}
}
const res = mapping(new TodoItem('task'), {}, {
fullName: function () {
return this.author.firstName + this.author.lastName
}
})
assert.deepEqual(res, {
author: {
firstName: "dnt",
lastName: "zhang"
},
fullName: 'dntzhang',
completed: false,
text: "task"
})
Here's a more complex example:
let id = 0
class TodoItem {
constructor(text, completed) {
this.id = id++
this.text = text
this.completed = completed || false
this.author = {
firstName: 'dnt',
lastName: 'zhang'
}
this.test = 3
this.arr = [{ f: 3 }, { f: 5 }, { f: 10 }]
}
}
class TodoList {
constructor(items) {
this.items = items || []
this.ee = 111
this.dd = 3
this.obj = { a: 2 }
}
}
const list = new TodoList([
new TodoItem('task1'),
new TodoItem('task2')
])
const res = mapping({ a: { b: 2, e: [{ f: 3 }, { f: 5 }, { f: 10 }] }, list: list }, {}, {
'a.test': 1,
'a.squareB': function () {
return this.b * this.b
},
'a.e[0].squareF': function () {
return this.f * this.f
},
'a.e[1].squareF': function () {
return this.f * this.f
},
'a.e[2]': function () {
return 'change array item!'
},
'a.e[3]': function () {
return 'add array item!'
},
'list.items[*].fullName': function () {
return this.author.firstName + this.author.lastName
},
'list.items[*].squareTest': function () {
return this.test * this.test
},
'list.items[*].arr[*].squareF': function () {
return this.f * this.f
}
})
Output:
{
"a": {
"b": 2,
"e": [
{
"f": 3,
"squareF": 9
},
{
"f": 5,
"squareF": 25
},
"change array item!",
"add array item!"
],
"squareB": 4,
"test": 1
},
"list": {
"items": [
{
"id": 0,
"text": "task1",
"completed": false,
"author": {
"firstName": "dnt",
"lastName": "zhang"
},
"fullName": "dntzhang",
"squareTest": 9,
"test": 3,
"arr": [{ f: 3, squareF: 9 }, { f: 5, squareF: 25 }, { f: 10, squareF: 100 }]
},
{
"id": 1,
"text": "task2",
"completed": false,
"author": {
"firstName": "dnt",
"lastName": "zhang"
},
"fullName": "dntzhang",
"squareTest": 9,
"test": 3,
"arr": [{ f: 3, squareF: 9 }, { f: 5, squareF: 25 }, { f: 10, squareF: 100 }]
}
],
"ee": 111,
"dd": 3,
"obj": {
"a": 2
}
}
}
License
MIT © dntzhang