本文纯属个人面试中和面经上碰到感觉有难度的题。
1,对象扁平化
描述:实现一个 flatten 函数,将接受的对象或数组进行扁平化处理,返回处理后的结果。值为 null 或 undefined 的值丢弃。
var input = {
a: 1,
b: [1, 2, { c: true }, [3]],
d: {e: 2, f: 3},
g: null
}
输出如下:
{
a: 1,
b[0]: 1,
b[1]: 2,
b[2].c: true,
b[3][0]: 3,
d.e: 2,
d.f: 3,
}
复制代码
代码如下:
function flatten (target, path = '', resObj = {}, character1 = '', character2 = '') {
if (target === null) return;
if (['Object', 'Array'].includes(Object.prototype.toString.call(target).slice(8, -1))) {
for (let key in target) {
if (['Null', 'Undefined'].includes(Object.prototype.toString.call(target[key]).slice(8, -1))) continue;
if (Object.prototype.toString.call(target[key]).slice(8, -1) === 'Array') {
let currPath = path ? `${path}[${key}]` : key;
flatten(target[key], currPath, resObj, '[', ']');
} else if (Object.prototype.toString.call(target[key]).slice(8, -1) === 'Object') {
let currPath = path ? `${path}.${key}` : key;
flatten(target[key], currPath, resObj, '.');
} else resObj[path + character1 + key + character2] = target[key];
}
} else return target;
return resObj;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END