Object.keys(),Object.values(),Object.entries()

Object.keys(),Object.values(),Object.entries()

Object.keys()

ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。

var obj = { foo: ‘bar‘, baz: 42 };
Object.keys(obj)
// ["foo", "baz"]

ES2017 引入了跟Object.keys配套的Object.valuesObject.entries,作为遍历一个对象的补充手段,供for...of循环使用。

let {keys, values, entries} = Object;
let obj = { a: 1, b: 2, c: 3 };

for (let key of keys(obj)) {
  console.log(key); // ‘a‘, ‘b‘, ‘c‘
}

for (let value of values(obj)) {
  console.log(value); // 1, 2, 3
}

for (let [key, value] of entries(obj)) {
  console.log([key, value]); // [‘a‘, 1], [‘b‘, 2], [‘c‘, 3]
}

Object.values()

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。

const obj = { foo: ‘bar‘, baz: 42 };
Object.values(obj)
// ["bar", 42]

返回数组的成员顺序,与本章的《属性的遍历》部分介绍的排列规则一致。

const obj = { 100: ‘a‘, 2: ‘b‘, 7: ‘c‘ };
Object.values(obj)
// ["b", "c", "a"]

上面代码中,属性名为数值的属性,是按照数值大小,从小到大遍历的,因此返回的顺序是bca

Object.values只返回对象自身的可遍历属性。

const obj = Object.create({}, {p: {value: 42}});
Object.values(obj) // []

上面代码中,Object.create方法的第二个参数添加的对象属性(属性p),如果不显式声明,默认是不可遍历的,因为p的属性描述对象的enumerable默认是falseObject.values不会返回这个属性。只要把enumerable改成trueObject.values就会返回属性p的值。

const obj = Object.create({}, {p:
  {
    value: 42,
    enumerable: true
  }
});
Object.values(obj) // [42]

Object.values会过滤属性名为 Symbol 值的属性。

Object.values({ [Symbol()]: 123, foo: ‘abc‘ });
// [‘abc‘]

如果Object.values方法的参数是一个字符串,会返回各个字符组成的一个数组。

Object.values(‘foo‘)
// [‘f‘, ‘o‘, ‘o‘]

上面代码中,字符串会先转成一个类似数组的对象。字符串的每个字符,就是该对象的一个属性。因此,Object.values返回每个属性的键值,就是各个字符组成的一个数组。

如果参数不是对象,Object.values会先将其转为对象。由于数值和布尔值的包装对象,都不会为实例添加非继承的属性。所以,Object.values会返回空数组。

Object.values(42) // []
Object.values(true) // []

Object.entries()

Object.entries()方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。

const obj = { foo: ‘bar‘, baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]

除了返回值不一样,该方法的行为与Object.values基本一致。

如果原对象的属性名是一个 Symbol 值,该属性会被忽略。

Object.entries({ [Symbol()]: 123, foo: ‘abc‘ });
// [ [ ‘foo‘, ‘abc‘ ] ]

上面代码中,原对象有两个属性,Object.entries只输出属性名非 Symbol 值的属性。将来可能会有Reflect.ownEntries()方法,返回对象自身的所有属性。

Object.entries的基本用途是遍历对象的属性。

let obj = { one: 1, two: 2 };
for (let [k, v] of Object.entries(obj)) {
  console.log(
    `${JSON.stringify(k)}: ${JSON.stringify(v)}`
  );
}
// "one": 1
// "two": 2

Object.entries方法的另一个用处是,将对象转为真正的Map结构。

const obj = { foo: ‘bar‘, baz: 42 };
const map = new Map(Object.entries(obj));
map // Map { foo: "bar", baz: 42 }

自己实现Object.entries方法,非常简单。

// Generator函数的版本
function* entries(obj) {
  for (let key of Object.keys(obj)) {
    yield [key, obj[key]];
  }
}

// 非Generator函数的版本
function entries(obj) {
  let arr = [];
  for (let key of Object.keys(obj)) {
    arr.push([key, obj[key]]);
  }
  return arr;
}

原文地址:https://www.cnblogs.com/sunshineForFuture/p/10432211.html

时间: 2024-11-01 11:15:48

Object.keys(),Object.values(),Object.entries()的相关文章

Object.keys(),Object.values(),Object.entries()

1. (1)Object.keys() //返回 键 数组 返回数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名. eg:var obj = {a:1,b:'gy'} Object.keys(obj) // ['a','b'] (2)Object.values() //返回 值 数组 返回数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值 eg1:var obj = {a:1,b:'gy'} Object.values(obj

遍历对象属性(for in、Object.keys、Object.getOwnProperty)

js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性.继承自原型的属性 var obj = {"name":"Poly", "career":"it"} Object.defineProperty(obj, "age", {value:"forever

在原生不支持的旧环境中添加兼容的 Object.keys

1 if (!Object.keys) { 2 Object.keys = (function () { 3 var hasOwnProperty = Object.prototype.hasOwnProperty, //原型上的方法,只取自身有的属性: 4 hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), //ie6一下,!之后的内容为false; 5 dontEnums = [ 6 'toString

Object.keys()

Object.keys(obj),返回一个数组,数组里是该obj可被枚举的所有属性名.请看示例: 示例一: function Pasta(grain, width, shape) { this.grain = grain; this.width = width; this.shape = shape; this.toString = function () { return (this.grain + ", " + this.width + ", " + this.

object.keys()与for in的区别

object.keys()返回一个数组,数组值为对象自有的属性,不会包括继承原型的属性 for in:遍历对象可枚举属性,包括自身属性,以及继承自原型的属性 原文地址:https://www.cnblogs.com/superclound/p/11247708.html

while循环,布尔类型,可变or不可变,数字,字符串,列表,元组,字典

while 循环 '''1.什么是循环? 循环即重复的过程 2.为什么要有循环 3.while循环的语法(又称之为条件循环) while 条件: 代码1 代码2 代码3 .... ''' # 注意:下述形式的死循环,会造成cpu的占用率过高# i=1# while True:# i+=1 #打印1-10# n=1# while True:# if n <= 10: #n=10# print(n)# n+=1# else:# break #打印1-10:改进1# n=1# while True:#

[JS]Object.keys, values, entries

Object.keys, values, entries 对于普通对象,下列这些方法是可用的: Object.keys(obj) —— 返回一个包含该对象所有的键的数组. Object.values(obj) —— 返回一个包含该对象所有的值的数组. Object.entries(obj) —— 返回一个包含该对象所有 [key, value] 键值对的数组. 1 let obj = { 2 name: "jack", 3 age: 20, 4 sex: "man"

对象是否拥有某个属性,in和for in以及object.hasOwnProperty(&#39;&#215;&#215;&#215;&#39;)的异同,以及Object.defineProperty(),Object.keys(),Object.getOwnPropertyNames()的用法

1.在某个对象是否拥有某个属性,判断的方法有很多,常用的方法就是object.hasOwnProperty('×××'),这个方法是不包括对象原型链上的方法的,举个例子: var obj = { name:'fei' } console.log(obj.hasOwnProperty('name'))//true console.log(obj.hasOwnProperty('toString'))//false 在这个例子中,obj对象存在的name属性的时候,调用这个方法才是返回true,我们

使用 Object.create 创建对象,super 关键字,class 关键字

ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1}; // a ---> Object.prototype ---> null var b = Object.create(a); // b ---> a ---> Object.prototype ---> null console.log(b.a); // 1 (继承而来)