1.0.2 • Published 4 years ago

match-object-value v1.0.2

Weekly downloads
1
License
ISC
Repository
-
Last release
4 years ago
用于解析复杂的javascript对象,只需要其中的部分属性,
通过match对象去解析出obj的值
不限深度

let matchValue=require('match-object-value')

// 参数
let ans=matchValue(obj,match)
    obj 被解构的值
    match 解构参照对象
    ans 返回值  包含ans和groups两个属性

    obj和match必须具有相同的结构,否则会报错


let obj = {
    items: [
        {
            id: 1,
            name: '小明',
            contacts: {
                qq: '123123',
                phone: '0123456',
                addr: '北京'
            }
        },
        {
            id: 2,
            name: '小红',
            contacts: {
                qq: '456456',
                phone: '0456789',
                addr: '上海'
            }
        },
        {
            id: 3,
            name: '小李',
            contacts: {
                qq: '789789',
                phone: '0789123',
                addr: '广州'
            }
        }
    ]
}

// 过滤掉其他不需要的属性
let ans = matchValue(obj, {
    items: [
        {
            name: 1,
            contacts: {
                addr: 1
            }
        }
    ]
})
console.log(ans)
// {
//   "ans": {
//     "items": [
//       {
//         "name": "小明",
//         "contacts": {
//           "addr": "北京"
//         }
//       },
//       {
//         "name": "小红",
//         "contacts": {
//           "addr": "上海"
//         }
//       },
//       {
//         "name": "小李",
//         "contacts": {
//           "addr": "广州"
//         }
//       }
//     ]
//   },
//   "groups": {}
// }



let ans = matchValue(obj, {
    items: [
        {
            name: val => val + '同学', // 可以接受函数
            contacts: {
                addr: 1
            }
        }
    ]
})

// {
//   "ans": {
//     "items": [
//       {
//         "name": "小明同学",
//         "contacts": {
//           "addr": "北京"
//         }
//       },
//       {
//         "name": "小红同学",
//         "contacts": {
//           "addr": "上海"
//         }
//       },
//       {
//         "name": "小李同学",
//         "contacts": {
//           "addr": "广州"
//         }
//       }
//     ]
//   },
//   "groups": {}
// }

以 __ 开头的属性将被视为集合,结果存放在groups中 

let ans = matchValue(obj, {
    items: [
        {
            contacts: {
                __infos: 1, // 以__开头的属性将被视为集合,结果存放在groups中 
                addr: 1
            }
        }
    ]
})

// {
//   "ans": {
//     "items": [
//       {
//         "contacts": {
//           "addr": "北京"
//         }
//       },
//       {
//         "contacts": {
//           "addr": "上海"
//         }
//       },
//       {
//         "contacts": {
//           "addr": "广州"
//         }
//       }
//     ]
//   },
//   "groups": {
//     "__infos": [
//       {
//         "qq": "123123",
//         "phone": "0123456",
//         "addr": "北京"
//       },
//       {
//         "qq": "456456",
//         "phone": "0456789",
//         "addr": "上海"
//       },
//       {
//         "qq": "789789",
//         "phone": "0789123",
//         "addr": "广州"
//       }
//     ]
//   }
// }

let ans = matchValue(obj, {
    items: [
        {
            contacts: {
                __infos: val => val.addr, // 也可以接受函数
                addr: 1
            }
        }
    ]
})
// {
//   "ans": {
//     "items": [
//       {
//         "contacts": {
//           "addr": "北京"
//         }
//       },
//       {
//         "contacts": {
//           "addr": "上海"
//         }
//       },
//       {
//         "contacts": {
//           "addr": "广州"
//         }
//       }
//     ]
//   },
//   "groups": {
//     "__infos": [
//       "北京",
//       "上海",
//       "广州"
//     ]
//   }
// }