zl程序教程

您现在的位置是:首页 >  后端

当前栏目

前端百题斩【005】—— js中9种遍历对象的方法

2023-09-27 14:25:56 时间
1 简介


对象是在编程中最常见的部分 很多情况下需要遍历该对象上的属性 那么有几种方式可以帮助我们遍历该对象上的属性呢 下面一起来了解九种方法。

下面测试方法所用的对象如下所示


const parentObj {

 a: aaaaa ,

 b: Symbol( bbbbb ),

 c: ccccc 

const Obj Object.create(parentObj, {

 d: {

 value: ddddd ,

 enumerable: true

 e: {

 value: eeeee ,

 enumerable: false

 [Symbol( f )]: {

 value: fffff ,

 enumerable: true

});
Object.keys(obj)


Object.keys 返回一个所有元素为字符串的数组 其元素来自于从给定的object上面可直接枚举的属性(不含Symbol属性 。这些属性的顺序与手动遍历该对象属性时的一致。


console.log( Object.keys() , Object.keys(Obj)); // Object.keys() [ d ]
Object.values(obj)


Object.values()返回一个数组 其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。


console.log( Object.values() , Object.values(Obj)); // Object.values() [ ddddd ]
Object.entries(obj)


Object.entries()返回一个数组 其元素是与直接在object上找到的可枚举属性键值对相对应的数组。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。


console.log( Object.entries() , Object.entries(Obj)); // Object.entries() [ [ d , ddddd ] ]
Object.getOwnPropertyNames(obj)


Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名 包括不可枚举属性但不包括Symbol值作为名称的属性 组成的数组。


console.log( Object.getOwnPropertyNames() , Object.getOwnPropertyNames(Obj)); // Object.getOwnPropertyNames() [ d , e ]
Object.getOwnPropertySymbols(obj)


Object.getOwnPropertySymbols() 方法返回一个给定对象自身的所有 Symbol 属性的数组。


console.log( Object.getOwnPropertySymbols() , Object.getOwnPropertySymbols(Obj)); // Object.getOwnPropertySymbols() [ Symbol(f) ]
for……in


遍历所有可枚举的属性 包括原型上的 然后可利用hasOwnProperty判断对象是否包含特定的自身 非继承 属性 其具有以下特点


1 index索引为字符串型数字 不能直接进行几何运算

2 遍历顺序有可能不是按照实际数组的内部顺序

3 会遍历数组的所有可枚举属性 包括原型

4 for...in更适合便利对象 不要使用for...in遍历数组


for(let key in Obj) {

 // for in: d

 // for in: a

 // for in: b

 // for in: c

 console.log( for in: , key);

}
for……of


必须部署了Iterator接口后才能使用。使用范围 数组、Set和Map结构、类数组对象 arguments、DOMNodeList对象…… 、Generator对象以及字符串


for(let value of Object.values(Obj)) {

 // for of: ddddd

 console.log( for of: , value);

}
forEach


使用break不能中断循环使用


Object.values(Obj).forEach(value {

 // forEach: ddddd

 console.log( forEach: , value);

});
Reflect.ownKeys(obj)


返回一个数组 包含对象自身的所有属性 不管属性名是Symbol还是字符串 也不管是否可枚举。


console.log( Reflect.ownKeys() , Reflect.ownKeys(Obj)); // Reflect.ownKeys() [ d , e , Symbol(f) ]
2 特点总结类型特点Object.keys(obj)返回对象本身可直接枚举的属性(不含Symbol属性 Object.values(obj)返回对象本身可直接枚举的属性值(不含Symbol属性 Object.entries(obj)返回对象本身可枚举属性键值对相对应的数组(不含Symbol属性 Object.getOwnPropertyNames(obj)返回对象所有自身属性的属性名 不包括Symbol值作为名称的属性 Object.getOwnPropertySymbols(obj)返回一个给定对象自身的所有 Symbol 属性的数组for……in所有可枚举的属性 包括原型上的 for……of必须部署了Iterator接口后才能使用 例如数组、Set和Map结构、类数组对象、Generator对象以及字符串forEachbreak不能中断循环Reflect.ownKeys(obj)对象自身所有属性3 遍历顺序

上述遍历对象的属性时都遵循同样的属性遍历次序规则

首先遍历所有属性名为数值的属性 按照数字排序
其次遍历所有属性名为字符串的属性 按照生成时间排序
最后遍历所有属性名为Symbol值的属性 按照生成时间排序

用下面代码来验证上述遍历规则


const Obj {

 [Symbol(0)]: symbol ,

 1 : 1 ,

 c : c ,

 1a1 : 11 ,

 22223333: 2 ,

 d : d 

console.log(Reflect.ownKeys(Obj)); // [ 1 , 22223333 , c , 1a1 , d , Symbol(0) ]



前端开发:JS中关于八皇后算法的使用 在前端开发过程中,关于算法的使用也是非常常见的操作,尤其是处理一些复杂的业务场景,还有就是前端获取到后端返回的复杂结构的数据,所以说前端开发中处处都有算法使用的场景。开发者从接触编程开发开始,就与算法脱不了干系了,算法又和数学分不开,总归到底还是对逻辑思维和数学计算知识的使用。但是大部分开发者没有去深度的针对算法领域去深入,而且有时候太深奥的算法也不常用,往往就忽略了。但是作为程序开发人员,无算法无编程,经典的算法还是要掌握的,本篇博文就来分享一下关于八皇后算法在前端领域的运用,记录一下,方便后期查阅使用。
前端开发:JS中使用到的贪心算法场景 在前端开发过程中,除了一般的逻辑使用之外,也会涉及到算法相关的知识,比如冒泡排序、数组去重/合并、贪心算法、八皇后算法等等,这些都是比较常用的前端算法相关的知识点。关于前端实际开发中用到的算法,虽然没有后端要求的那么多,但是也有比较重要的算法知识,本篇博文就来分享一下关于贪心算法的相关知识点,记录一下,方便查阅使用。