原来的数组结构:
最终效果:
使用了reduce(),forEach()方法
let arr = [{ "key": "a", "value": 1, "sort": 2, }, {
"key": "b", "value": 2, "sort": 0
}, { "key": "c", "value": 3, "sort": 1 }, {
"key": "d", "value": 4, "sort": 3
}]
const convertArrtoObj = (arr, key) => {
const initObj = {};
return arr.reduce((obj, currVal) => {
return {
...obj,
[currVal.sort]: currVal
}
}, initObj);
};
const newnamesObj = convertArrtoObj(arr, 'sort');
console.log(newnamesObj); //01.按sort排序到一个新对象中
let res = {} //声明新的对象
Object.keys(newnamesObj).forEach(element => {
console.log(element);
let values1 = newnamesObj[element]
res[values1.key] = { 'value': values1.value, "sort": values1.sort }
});
console.log(res); //02.key为值创建一个新对象
注意事项:
有一个问题,chrome里的控制台打印展开后的顺序和未展开的不一致,导致问题的原因是:Chrome浏览器下创建的js对象数组会自动按照键排序,所以可以忽略,只关心第一行就行啦.
所以只看这个就行:
当然还有其他办法,这里只是一种.
关于控制台打印看这个链接javascript中的对象为什么会按照键来自动排序