Skip to content

findKey

查找对象中满足所提供的测试函数的第一个元素的键。

Signature

typescript
function findKey<T extends Record<any, any>>(
  obj: T,
  predicate: (value: T[keyof T], key: keyof T, obj: T) => boolean
): keyof T | undefined;

Parameters

  • obj (T extends Record<any, any>): 要搜索的对象。
  • predicate ((value: T[keyof T], key: keyof T, obj: T) => boolean): 对对象中的每个值执行的函数。

Returns

(keyof T | undefined): 对象中满足所提供的测试功能的第一个元素的键,如果没有元素通过测试,则为未定义。

Examples

typescript
const users = {
  pebbles: { age: 24, active: true },
  barney: { age: 36, active: true },
  fred: { age: 40, active: false },
};

findKey(users, o => o.age < 40); // 'pebbles'
findKey(users, o => o.age > 50); // undefined

Lodash 兼容性

es-toolkit/compat 导入 findKey 以实现与 lodash 的完全兼容。

您可以通过多种方式指定查找键的条件。

  • 谓词函数:对每个元素执行谓词函数。返回第一个返回 true 的元素的键。
  • 部分对象:返回与给定对象部分匹配的元素的键。
  • 属性-值对:返回具有指定属性和值匹配的元素的键。
  • 属性名:返回指定属性评估为真的元素的键。

签名

typescript
export function findKey<T extends Record<any, any>>(
  obj: T,
  conditionToFind: (value: T[keyof T], key: keyof T, obj: T) => boolean
): keyof T | undefined;
export function findKey<T extends Record<any, any>>(obj: T, objectToFind: Partial<T[keyof T]>): keyof T | undefined;
export function findKey<T extends Record<any, any>>(
  obj: T,
  propertyToFind: [keyof T[keyof T], any]
): keyof T | undefined;
export function findKey<T extends Record<any, any>>(obj: T, propertyToFind: keyof T[keyof T]): keyof T | undefined;

示例

typescript
const users = { barney: { age: 36 }, fred: { age: 40 } };

findKey(users, o => o.age < 40);
// => 'barney'
findKey(users, { age: 36 });
// => 'barney'
findKey(users, ['age', 36]);
// => 'barney'

const languages = { javascript: { active: false }, typescript: { active: true } };
findKey(users, 'active');
// => 'typescript'

采用 MIT 许可证发布。