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

  • Post author:
  • Post category:其他


使用对象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>



版权声明:本文为xiaochen_____原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。