import allKeys from './allKeys';
import { stubTrue } from './internals/helpers';
import { objectProtoToString } from './internals/native';
/**
* 创建一个对象,该对象由 `object` 自身可枚举属性(包含 `Symbol` 属性)和值反转组成。
*
* @alias module:Object.invert
* @since 1.8.0
* @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy | Truthy}
* @param {Object} object 来源对象。
* @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要反转,否则不反转。
* @returns {Object} 新对象。
* @example
*
* invert({ a: 1, b: 2 }); // { 1: 'a', 2: 'b' }
*
* invert({ a: undefined, b: null }); // { undefined: 'a', null: 'b' }
*
*/
function invert(object, predicate = stubTrue) {
const _keys = allKeys(object);
const result = {};
_keys.forEach((key) => {
const value = object[key];
if (predicate(value, key)) {
const valueProp = value != null && typeof value.toString != 'function' ? objectProtoToString.call(value) : value;
result[valueProp] = key;
}
else {
result[key] = value;
}
});
return result;
}
export default invert;