平常开发中难免遇到一些数组和对象相互转换,先来看看
数组转对象
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.keys 和 Object.values 取出对象的 key 和 val 然后组装一下即可
对象把键名按照字母顺序排序
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.keys 和 sort 对获取的属性名进行排序,然后重新组装
还可以排序之后输出数组
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'},
// ]