数组对象互转Object.entries()&&Object.fromEntries()
使用 Object.fromEntries 将数组转成对象
Object.fromEntries() 方法把键值对列表转换为一个对象。
语法:
Object.fromEntries(iterable);
iterable
:类似 Array 、 Map 或者其它实现了可迭代协议的可迭代对象。
返回一个新的对象
let keyArray = [
['name','清梦徐徐'],
['age','18']
]
console.log(Objec.fromEntries(keyArray))
// {name:'清梦徐徐',age:'18'}
Object.entries()
Object.entries(obj)
方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in
循环遍历该对象时返回的顺序一致(区别在于 for-in
循环还会枚举原型链中的属性)。
let keyObj = {
name:'清梦徐徐',
age:'18'
}
console.log(Object.entries(keyObj))
// [['name','清梦徐徐'],['age','18']]
其中Object.entries()与Object.fromEntries()为互逆操作
使用 Object.fromEntries 将 Map 转成对象
object.fromEntries()还可以将Map数据类型的数据转为对象
let map = new Map([['name','清梦徐徐'],['age','18']])
console.log(map)
// {"name" => "清梦徐徐", "age" => "18"}
console.log(Object.fromEntries(map))
// {name:'清梦徐徐',age:'18'}
Object.entries和Object.fromEntries混合使用-对象到对象的转换
let age = {p1:18,p2:19,p3:20}
const result = Object.fromEntries(Object.entries(age).filter(([key,value])=> value > 19))
console.log(result)
// {p3: 20}
如果不使Object.fromEntries将数组转为对象,那应该怎么实现?
let arr = [
['name','清梦徐徐'],
['age',18]
]
function toObject(arr){
return Array.from(arr).reduce(
(acc,[key,value]) => Object.assign(acc,{[key]:value}), {}
)
}