js选取(pick)和反选(reject)对象属性的方法

使用对象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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值