1. 前言
首先,当JS对象是键值对的情况时(Json对象),因为数组时以数字为索引的,所以只能把JS对象中的Key或者Value组成数组使用。
2. 样例如下:
var obj={"one":"I am 1","two":"I am 2"}
var arr = Object.getOwnPropertyNames(obj) //arr=["one", "two"]
var arr2 = Object.keys(obj)//arr=["one", "two"]
var valArr = arr.map(function(i){return obj[i]})//["I am 1", "I am 2"]
var valArr2 = arr2.map(function(i){return obj[i]})//["I am 1", "I am 2"]
//或者2,4和3,5各自合并成一条语句
var valArr22 = Object.keys(obj).map(function(i){return obj[i]})//["I am 1", "I am 2"]
如果对于一个已知的对象来说,是没什么区别的,如果我们需要的对象的key是变量,就需要第二种取值的方式。
我们文章开始例子中的对象是:
如果目标数组只是为了得到对象的key的集合或者value的集合还是相对容易的
如果像我文中开始的需求的话就只需要改变一下push进去的内容为一个对象即可
Object.keys()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" }