import forEach from './forEach';
import isObjectLike from './isObjectLike';
/**
* 将对象转为属性路径/值对的数组。
*
* 如果参数是对象,则包含对象自身的可枚举属性(包含 `Symbol` 属性)。
*
* 如果参数是数组,则遍历数组。
*
* @private
* @param object 对象或数组
* @param parentPath 父级属性路径
* @returns 属性路径/值对的数组。
*/
function basePathPairs(object, parentPath = []) {
const result = [];
if (isObjectLike(object)) {
forEach(object, (v, k) => {
const currentPath = parentPath.concat([k]);
if (isObjectLike(v)) {
result.push(...basePathPairs(v, currentPath));
}
else {
result.push([currentPath, v]);
}
});
}
return result;
}
/**
* 将对象转为属性路径/值对的数组。与 [`fromPathPairs`](#.fromPathPairs) 相反。
*
* @alias module:Object.pathPairs
* @since 1.16.0
* @param {Object|Array} object 对象或数组。
* @returns {Array} 属性路径/值对的数组。
* @example
* pathPairs({ date: { start: '2024-10-10', end: '2024-12-31' } });
* // [
* // [['date', 'start'], '2024-10-10'],
* // [['date', 'end'], '2024-12-31']
* // ]
*
* pathPairs({ date: ['2024-10-10', '2024-12-31'] });
* // [
* // [['date', 0], '2024-10-10'],
* // [['date', 1], '2024-12-31']
* // ]
*
* pathPairs([{ date: '2024-10-10' }, { date: '2024-12-31' }]);
* // [
* // [[0, 'date'], '2024-10-10'],
* // [[1, 'date'], '2024-12-31']
* // ]
*
*/
function pathPairs(object) {
return basePathPairs(object);
}
export default pathPairs;