sf-utils2 sf-utils2
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
  • 快速开始

  • 基础-Base

  • 对象-Object

    • 序言 👏
    • has【对象含有属性(功能更强大)】
    • hasOwn【对象含有属性(扩展)】
    • deepClone【深度克隆】
    • setPropPath【给每个对象设置路径节点名】
    • findPropPath【从对象中找到键名路径名】
    • get【获取对象属性值】🔥🔥🔥
    • flatten 【将对象进行扁平化】
    • readonly【定义只读属性】
    • def【定义不可枚举属性】
    • cache【内存缓存对象】
    • bus【发布订阅】🔥🔥🔥
    • merge 【合并对象】
    • deepMerge 【递归深合并对象】
    • transformObjectKeys【对象属性字段全部转成大写或者小写】
    • convertPropToLower【对象属性字段全部转成大写或者小写】
    • looseEqual【比较对象内部结构和数据】🔥🔥🔥
    • omit【忽略对象属性】
    • pick【取出对象属性】
      • 1.示例
      • 2.入参说明
      • 3.源码
  • 数组-Array✨✨✨

  • 方法-Function

  • 字符串-String

  • 数学-Math

  • 文件-Buffer

  • 节点-dom

  • 拓展

  • nodejs

目录

pick【取出对象属性】

描述

创建一个从 object 中选中的属性的对象。 v3.0.4+ 可以理解成lodash中pick和pickBy集合

# 1.示例

import { pick } from 'sf-utils2'

// 数组形式
const object = { a: 1, b: '2', c: 3 }
pick(object, ['a', 'c']) // => { 'a': 1, 'c': 3 }

// 字符串形式,
const object = { a: 1, b: '2', c: 3 }
pick(object, 'a,c') // => { 'a': 1, 'c': 3 }

// 方法形式,
const object = { a: 1, b: '2', c: 3 }
$sf.omit(object, (item, key) => ['a', 'c'].includes(key)) // => { 'a': 1, 'c': 3 }
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.入参说明

参数 说明 类型 是否必填 默认值
obj 目标对象 Object 是
predicate 要被忽略的属性或者过滤自定义方法,(注:单独指定或指定在数组中或者方法过滤),字符串类型时,属性字段是以,动态拼接起来 String、String[]、Function 是

# 3.源码

import isPlainObject from '@/base/isPlainObject'
import isString from '@/base/isString'
import deepClone from '@/object/deepClone'
import arrayToObj from '@/array/arrayToObj'
import hasOwn from '@/object/hasOwn'
import isArray from '@/base/isArray'
import isFunction from '@/base/isFunction'

/**
 * 创建一个对象,这个对象组成为从 object 中经 predicate 判断为真值的属性
 * @param {Object} obj
 * @param {String|String[]|Function} predicate
 * @return {{}|*|*[]}
 */
function pick(obj = {}, predicate) {
  if (!isPlainObject(obj)) return obj
  let innerObj = {}
  if (isString(predicate)) {
    // 字符串 切割,
    const splits = predicate.split(',').filter(Boolean)
    const splitsObj = arrayToObj(splits)
    Object.entries(obj).forEach(([k, v]) => {
      if (hasOwn(splitsObj, k)) innerObj[k] = v
    })
  } else if (isArray(predicate)) {
    // 数组
    const tempObj = arrayToObj(predicate)
    Object.entries(obj).forEach(([k, v]) => {
      if (hasOwn(tempObj, k)) innerObj[k] = v
    })
  } else if (isFunction(predicate)) {
    // 是方法
    Object.entries(obj).forEach(([k, v]) => {
      if (predicate(v, k)) innerObj[k] = v
    })
  } else {
    innerObj = obj
  }
  return deepClone(innerObj)
}

export default pick
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
上次更新: 2023/06/24, 19:35:48
omit【忽略对象属性】
序言 👏

← omit【忽略对象属性】 序言 👏→

Theme by Vdoing | Copyright © 2022-2025 bianpengfei
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×