js对象把键名按照字母顺序排序,对象和数组相互转换

228 阅读1分钟

平常开发中难免遇到一些数组和对象相互转换,先来看看

数组转对象
let arr = [
    "merchantGuid=100638879475847168",
    "schemeGuid=f64d1323eb694f0790a1014ed9e64943",
    "number=1",
]
function getObj(arr = []) {
    if (Array.isArray(arr) && arr.length > 0) {
        let obj = {};
        for (let i = 0; i < arr.length; i++) {
            let key = arr[i].split("=")[0];
            let val = arr[i].split("=")[1];
            obj[key] = val;
        }
        return obj
    }

}

const obj = getObj()

console.log("obj", obj);
// merchantGuid: "100638879475847168"
// number: "1"
// schemeGuid: "f64d1323eb694f0790a1014ed9e64943"

这个就是取出数组的每一项然后通过 split 拆分,再拼接就好了

还有一种数组里面是对象这种结构的


let arr = [
    { key: "merchantGuid" },
    { key: "100638879475847168" },
    { key: "schemeGuid" },
    { key: "f64d1323eb694f0790a1014ed9e64943" },
    { key: "number" },
    { key: "1" },
    { key: "cardId" },
    { key: "2021072401" },
]
function getObj1(arr = []) {
    if (Array.isArray(arr) && arr.length > 0) {
        let obj = {};
        // 这种数据组装成对象   第一个是key  第二个是value 规律就是偶数个的key来作为对象的键名,奇数个来作为对象的值
        // 而且 这种数据一般都是配对的,都是偶数个
        for (let i = 0; i < arr.length; i++) {
            if (i % 2 === 0) { // 0 2 4 6 8 ....  这一步判断为偶数很重要 实现偶数个的key来作为对象的键名,奇数个来作为对象的值   然后正好 i + 1 的时候是数组的最后一个  不会出现i + 1已经超出数组的length的情况

                obj[arr[i].key] = arr[i + 1].key;
            }
        }
        return obj
    }
}
const obj = getObj1(arr)
console.log("obj", obj);
// {merchantGuid: '100638879475847168', schemeGuid: 'f64d1323eb694f0790a1014ed9e64943', number: '1', cardId: '2021072401'}
对象转数组

后面对传入参数的类型没有做判断 小伙伴自己加一下


function getArr(obj = {}) {
    let keysArr = Object.keys(obj);
    let valsArr = Object.values(obj);
    if (keysArr.length > 0) {
        let plainArr = [];
        let itemArr = [];
        for (let i = 0; i < keysArr.length; i++) {
            // 这个是没有包装成对象 
            plainArr.push(keysArr[i] + '=' + valsArr[i])
            // 这个是每一项都包装成对象
            itemArr.push({
                [keysArr[i]]: valsArr[i],
            });
        }
        return [plainArr, itemArr]
    }

}

const [plainArr, itemArr] = getArr({
    merchantGuid: "100638879475847168",
    schemeGuid: "f64d1323eb694f0790a1014ed9e64943",
    number: "1",
})

console.log("plainArr", plainArr);// ['merchantGuid=100638879475847168', 'schemeGuid=f64d1323eb694f0790a1014ed9e64943', 'number=1']
console.log('itemArr', itemArr);
/* 
[ 
{merchantGuid: '100638879475847168'},
{schemeGuid: 'f64d1323eb694f0790a1014ed9e64943'}, 
{number: '1'}
]
*/

这个就是通过 Object.keysObject.values 取出对象的 keyval 然后组装一下即可

对象把键名按照字母顺序排序
let obj = {
    merchantGuid: "100638879475847168",
    schemeGuid: "f64d1323eb694f0790a1014ed9e64943",
    number: "1",
};
function objKeySort(obj) {
    var newkey = Object.keys(obj).sort(); 
    var newObj = {}; 
    for (var i = 0; i < newkey.length; i++) {
        newObj[newkey[i]] = obj[newkey[i]]; 
    }
    return newObj;
}
let res = objKeySort(obj);
console.log("res", res);
// {
// merchantGuid: "100638879475847168",
// number: "1",
// schemeGuid: "f64d1323eb694f0790a1014ed9e64943"
// }

这个就是通过 Object.keyssort 对获取的属性名进行排序,然后重新组装

还可以排序之后输出数组

let obj = {
    merchantGuid: "100638879475847168",
    schemeGuid: "f64d1323eb694f0790a1014ed9e64943",
    number: "1",
};
const res = Object.keys(obj)
    .sort()
    .map((key) => {
        return { [key]: obj[key] };
    }); // 输出是个数组
console.log("res", res);
// [ 
// {merchantGuid: '100638879475847168'},
// {number: '1'}
// {schemeGuid: 'f64d1323eb694f0790a1014ed9e64943'}, 
// ]