js物件排序、物件陣列根據屬性排序、物件生成類url字串
阿新 • • 發佈:2018-12-27
工作中經常會遇到物件屬性排序的問題,在加密中,根據屬性名自然排序,然後拼接成字串加密,也是很常見的需求,接下來給大家帶來一些基本方法:
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
感謝您的閱讀!如果文章中有任何錯誤,或者您有更好的理解和建議,歡迎和我聯絡!