2675.将对象数组转换为矩阵
链接:2675.将对象数组转换为矩阵
难度:Hard
标签:
简介:编写一个函数,将对象数组 arr 转换为矩阵 m 。
题解 1 - typescript
- 编辑时间:2023-05-16
- 执行用时:360ms
- 内存消耗:67.9MB
- 编程语言:typescript
- 解法介绍:先深度遍历拿所有的Key,再对每个对象尝试读key。
const isObject = (o: unknown): o is object => o instanceof Object;
function jsonToMatrix(arr: any[]): (string | number | boolean | null)[][] {
    const keySet = new Set<string>();
    for (const item of arr) findKey(item);
    keySet.delete('');
    const keys = Array.from(keySet.keys()).sort();
    return [keys, ...arr.map(item => keys.map(k => get(item, k)))];
    function findKey(item: any[] | object, key = '') {
        if (isObject(item))
        for (const k of Object.keys(item)) findKey(item[k], key ? key + '.' + k : `${k}`);
        else keySet.add(key);
    }
    function get(item: object, k: string): any {
        for (const nextK of k.split('.'))
        if (!isObject(item) || item[nextK] === undefined) return '';
        else item = item[nextK];
        return isObject(item) ? '' : item;
    }
}