// 集合

interface ObjType {
    [key: string]: any;
}

/**
 * 多个对象合并相同的属性
 * @param a 合并之后的对象
 * @param b 把相同的属性的value 值赋值给a对象
 */
export function mergeObj(a: ObjType, ...rest: ObjType[]): void {
    Object.keys(a).forEach((key) => {
        rest.forEach((param) => {
            if (Reflect.has(param, key)) {
                a[key] = param[key];
            }
        });
    });
}

/**
 * 合并两个对象
 * @param a 
 * @param b 
 * @param callBack 
 */
export function mergeTwoObj(a: any, b: any, callBack?: Function) {
    if (b && typeof b === 'object') {
        const obj: ObjType = {};
        Object.keys(a).forEach((el) => {
            const key = el.toLocaleLowerCase();
            if (Reflect.has(b, key)) {
                obj[el] = b[key];
            } else {
                console.warn(`为找到对应的key：${key}`);
                callBack && callBack(el)
            }
        });
        Object.assign(a, obj);
    }
}

/**
 * 对象转二进制数组
 * @param data 
 * @returns 
 */
export function objectToUint8Array(data: object | string) {
    const rawData: string = JSON.stringify(data);
    const outputArray = new Uint8Array(rawData.length);
    for (let i = 0; i < rawData.length; ++i) {
        outputArray[i] = rawData.charCodeAt(i);
    }
    return outputArray;
}

// export function objectToUint8Array(data: object): Uint8Array {
//     const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
//     const base64String = btoa(encode);// 对编码的字符串转化base64
//     const padding = '='.repeat((4 - base64String.length % 4) % 4);
//     // const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
//     // const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
//     const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
//     const rawData = window.atob(base64);
//     const outputArray = new Uint8Array(rawData.length);
//     for (let i = 0; i < rawData.length; ++i) {
//         outputArray[i] = rawData.charCodeAt(i);
//     }
//     return outputArray;
// }

