1. 程式人生 > >js物件排序、物件陣列根據屬性排序、物件生成類url字串

js物件排序、物件陣列根據屬性排序、物件生成類url字串

工作中經常會遇到物件屬性排序的問題,在加密中,根據屬性名自然排序,然後拼接成字串加密,也是很常見的需求,接下來給大家帶來一些基本方法:

1.首先是根據首字元自然排序:

const obj = {cc:'',dd:'dd',ff:'ff',aa:'aa',bb:'bb'} //屬性隨機排列的物件

function sortObj(obj) {
    const keys = Object.keys(obj); //獲取key
    keys.sort(); //給key排序,排序是根據首字母進行
    let sorted = {};
    for(let k of keys){
        sorted[k] = obj[k];
    }
    return sorted; //返回排序好的物件
}

console.log(sortObj(obj)) //{ aa: 'aa', bb: 'bb', cc: '', dd: 'dd', ff: 'ff' }

2.物件陣列,根據某個屬性排序,比如:根據年齡,姓名等

const obj = [{name:"jack",age:20},{name:'lucy',age:15},{name:'tom',age:18}];

function compare(prop) { //傳入需要根據排序的屬性名 
    return function (obj1, obj2) {
        let val1 = obj1[prop];
        let val2 = obj2[prop];
        if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
            val1 = Number(val1);
            val2 = Number(val2);
        }
        if (val1 < val2) {
            return -1;
        } else if (val1 > val2) {
            return 1;
        } else {
            return 0;
        }
    }
}

console.log(obj.sort(compare('age'))); //根據年齡大小排序結果為:[ { name: 'lucy', age: 15},{ name: 'tom', age: 18 },{ name: 'jack', age: 20 } ]

2.物件生成類似url字串 : key=value&key1=value1

const obj = {cc:'',dd:'dd',ff:'ff',aa:'aa',bb:'bb'}

function urlStr(obj) {
    let str = '';
    for(let k in obj){
        if(str){
            str += `&`;
        }
        str += `${k}=${obj[k]}`;
    }
    return str;
}

console.log(urlStr(obj));// 直接生成類url字串:cc=&dd=dd&ff=ff&aa=aa&bb=bb

console.log(urlStr(sortObj(obj))); // 可先呼叫1示例中的sortObj方法排序,然後再生成url字串:aa=aa&bb=bb&cc=&dd=dd&ff=ff

感謝您的閱讀!如果文章中有任何錯誤,或者您有更好的理解和建議,歡迎和我聯絡!