import forEach from './forEach';
import { stubFlase } from './internals/helpers';
import isMap from './isMap';
import isObject from './isObject';
/**
* 查找对象的键。
*
* @alias module:Object.findKey
* @since 1.13.0
* @param {Object | Map} obj 对象或 Map 对象
* @param {Function} [predicate] 迭代对象自身的可枚举属性(包含 `Symbol` 属性)调用的函数,返回 `Truthy` 表示要查找该值对应的键。
* @returns 如果对象存在要查找的值,返回该值的键,否则返回 `undefined`。
* @example
* const obj = { foo: 'bar', baz: 42 }
* findKey(obj, isNumber); // 'baz'
* findKey(obj, v => typeof v === 'bar'); // 'foo'
*
* const map = new Map([['foo', 'bar'], ['baz', 42]]);
* findKey(map, isNumber); // 'baz'
* findKey(map, v => typeof v === 'bar'); // 'foo'
*/
const findKey = (obj, predicate = stubFlase) => {
let key;
if (isMap(obj)) {
for (const [k, v] of obj) {
if (predicate(v, k)) {
key = k;
break;
}
}
}
else if (isObject(obj)) {
forEach(obj, (v, k) => {
if (predicate(v, k)) {
key = k;
return false;
}
});
}
return key;
};
export default findKey;