Skip to content

findBy

根据指定键值在数组中查找元素(支持嵌套数组)

⚠️ 破坏性变更:从 v0.20.0 起,findByKey(v0.15.0) 更名为 findBy,原函数已废弃

引入版本

0.20.0

Demo

ts
import { findBy } from '@wyfex/iutils'

const data = [
  { id: 1, label: '姓名' },
  { id: 2, label: '手机号', children: [{ id: 21, label: '验证码' }] },
  { id: 3, label: '密码' }
]

/**
 * ================== 单个值 - 平级查找 ==================
 */
console.log(
  '单个值 - 平级查找=>',
  findBy(data, { key: 'label', value: '姓名' })
)
// {id: 1, label: '姓名'}

/**
 * ================== 单个值 - 嵌套查找 ==================
 */
console.log(
  '单个值 - 嵌套查找=>',
  findBy(data, { key: 'label', value: '验证码' })
)
// {id: 21, label: '验证码'}

/**
 * ================== 单个值 - 值类型不一致 ==================
 */
console.log('单个值 - 值类型不一致=>', findBy(data, { key: 'id', value: '1' }))
// {id: 1, label: '姓名'}

/**
 * ================== 数组值 - 批量查找 平级 + 嵌套 ==================
 */
console.log(
  '数组值 - 批量查找 平级 + 嵌套=>',
  JSON.stringify(
    findBy(data, { key: 'label', value: ['姓名', '验证码', '密码'] }),
    null,
    2
  )
)
// [
//   { id: 1, label: '姓名' },
//   { id: 21, label: '验证码' },
//   { id: 3, label: '密码' }
// ]

/**
 * ================== 不存在的值 ==================
 */
console.log('不存在的值=>', findBy(data, { key: 'label', value: '不存在' }))
// undefined

/**
 * ================== 自定义嵌套key ==================
 */
const customData = [
  { id: 1, label: '父节点', child: [{ id: 11, label: '子节点' }] }
]
console.log(
  '自定义嵌套key=>',
  findBy(customData, { key: 'label', value: '子节点', childrenKey: 'child' })
)
// {id: 11, label: '子节点'}

基于 MIT 许可发布