Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
例如:
let obj = {
name: 'haha',
age: 20,
showName: function () {}
}
Object.keys(obj) //['name','age','showName']
处理数组时,返回数组各元素的索引值:
let arr = ['a', 'b', 'c']
Object.keys(arr)// ['0', '1', '2']
let brr = [1, 3, 4]
Object.keys(brr)// ['0', '1', '2']
可自动排序:
let arr = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.keys(arr))// console: ['2', '7', '100']
组合用法:
let obj = {
name: 'haha',
age: 20,
}
Object.keys(obj).map((val, index)=>{
obj[val] // 可以针对obj的不同属性做不同处理
})
Object.values()
Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
例如:
let obj = {
name: 'haha',
age: 20,
showName: function () {}
}
Object.values(obj) //['haha','20', f]
let brr = [1, 3, 4]
Object.values(brr)// [1, 3, 4]
排序:
let an_obj = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.values(an_obj))// ['b', 'c', 'a']
字符串:
console.log(Object.values('haha'))// ['h', 'a', 'h', 'a']
Object.entries()
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
const obj = { foo: 'bar', baz: 42 }
console.log(Object.entries(obj))// [ ['foo', 'bar'], ['baz', 42] ]
const anObj = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.entries(anObj))// [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
非对象会被强制转为对象:
console.log(Object.entries('foo'))// [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]
更优雅的遍历对象键值:
const obj = { a: 5, b: 7, c: 9 }
for (const [key, value] of Object.entries(obj)) {
console.log(`${key} ${value}`)// "a 5", "b 7", "c 9"
}
// 或者
Object.entries(obj).forEach(([key, value]) =>{
console.log(`${key} ${value}`)// "a 5", "b 7", "c 9"
})
Object.fromEntries()
Object.fromEntries() 把键值对列表转换为一个对象。改方法为ES10方法, Chrome不支持
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
const obj = Object.fromEntries(arr)
console.log(obj)// { 0: "a", 1: "b", 2: "c" }
var arr = ["中国|广东|深圳","中国|广东|深圳","中国|湖北|黄石","中国|湖北|武汉","中国|广东|广州","中国|广东|广州","中国|湖北|武汉","中国|福建|福州","中国|福建|厦门"]var result={}
var temp={}
for(var i=0i<arr.lengthi++){
var item=arr[i]
var its=item.split('|')//按|拆分
var country=its[0]//国家
var province=its[1]//省
var city=its[2]//城市
if(!result[country]){//国家不在结果对象里
result[country]=[]//添加
}
if(!temp[province]){//临时对象没有省信息
result[country].push(temp[province]={//记入结果数组
province:[province],
city:[],
count:[]
})
}
var info=temp[province]
var found=false
for(var j=info.city.length-1j>=0j--){//在省信息的城市数组里查找是否已经存在
if(info.city[j]==city){
found=true//已经存在
info.count[j]=info.count[j]+1//更新count
}
}
if(!found){//未找到城市
info.city.push(city)//添加
info.count.push(1)//count初始值为1
}
}
console.log(result)