记录笔试中的手撕代码

·  阅读 104

本文纯属个人面试中和面经上碰到感觉有难度的题。

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;
}
复制代码
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改