使用对象key value值分别对对象属性进行选择以及反选
<template>
<div>
<p>选择和反选对象属性</p>
</div>
</template>
<script>
export default {
created() {
const row = {
'accounts.id': 1,
'client.name': 'John Doe',
'bank.code': 'MDAKW213',
}
const table = [
row,
{ 'accounts.id': 3, 'client.name': 'Steve Doe', 'bank.code': 'STV12JB' },
]
// 取到了 client name
this.pick(row, ['client.name']) // console.log(this.pick(row, ['client.name']))
// 取到了一系列 client name
table.map((row) => {
this.pick(row, ['client.name']) // console.log(this.pick(row, ['client.name']))
})
// 反选方法
console.log(this.reject({ a: 55, b: 66, c: 77, d: 88 }, ['a', 'c']))
console.log(this.reject2({ a: 1, b: 2, c: 3, d: 4 }, ['a', 'c']))
},
methods: {
// 选择属性
pick(obj, keys) {
return keys
.map((k) => (k in obj ? { [k]: obj[k] } : {}))
.reduce((res, o) => Object.assign(res, o), {})
},
// 反选属性 方法一
reject(obj, keys) {
return Object.keys(obj)
.filter((k) => !keys.includes(k))
.map((k) => ({ [k]: obj[k] }))
.reduce((res, o) => Object.assign(res, o), {})
},
// 反选属性 方法二 利用pick
reject2(obj, keys) {
const vkeys = Object.keys(obj).filter((k) => !keys.includes(k))
return this.pick(obj, vkeys)
},
},
}
</script>