Objectkeys()函数,可以把对象左边的所有key返回一个数组,如果只有一个key的话,0就是你这个一大串
举例Objectkeys({ '5c09f2b6aeb04b22f846096a': '' } )[0]
var demo={"one","two","three"}
//获取对象的健值
var arr = Objectkeys(demo);
consolelog(arr);
//获取对象长度
consolelog(arrlength);
var content = $(‘div’)width();
//只是获取content宽度
var contentWithPadding = $('div')innerWidth();
//获取content+padding的宽度
var withoutMargin = $(‘div’)outerWidth();
//获取content+padding+border的宽度
var full = $('div')outerWidth(true);
//获取content+padding+border+margin的宽度
在实际开发中我们经常需要将对象转为字符串来传递数据,传递完毕后再以对象的方式显示,所以必须掌握相互转换的方法
一、将对象转为字符串:
let obj = {
name: "小米10",
color: '红色',
size: '1000200500',
price: '2999'
}
// 1 获取对象的两种方式:
// consolelog(objname);
// consolelog(obj['name']);
// 2遍历对象
// 21 for in 遍历对象
// for(变量 in 对象){
// }
for (let key in obj) { //for in 里面的变量喜欢用key
consolelog(key); // key 变量 输出得到是属性值
// consolelog(obj[k]); //得到里面的属性值
// consolelog(k + '--' + obj[k]);
}
// 22 ES6中新增的获取对象的所有属性方法
// Objectkeys() 返回对象的所有属性名 是个数组
consolelog(Objectkeys(obj)); //['name', 'color', 'size', 'price']
Objectkeys(obj)forEach(key => {
consolelog(key + '--' + obj[key]);
})
// Objectvalues返回对象的所有属性值 是个数组
consolelog(Objectvalues(obj));
consolelog(''repeat(30));
// 3两种方法转换为字符串
//方法一
let arr1 = [] //先声明空数组,再将空数组转换为字符串
for (let key in obj) {
arr1push(key + '=' + obj[key]) // 声明空数组接收对象转换后的数组
}
consolelog(arr1join('&')); //也可以声明一个字符串去接
// 方法二
// 先找到数组里面所有的属性名,然后用map修改属性
let str2 = Objectkeys(obj)map(key => [key, obj[key]]join('='))join('&')
consolelog(str2);
二、将字符串转为对象
let str = 'name=刘德华&age=18&sex=男';
let obj = {};
// split将字符串按照指定字符转为数组,forEach再遍历数组
strsplit('&')forEach(r => {
let arr = rsplit('='); //然后再用split按等号将数组拼成新数组
obj[arr[0]] = arr[1]; //再给对象赋值 arr[0]是属性。arr[1]是值
});
consolelog(obj);
前言
这三个方法,都可以用来遍历对象,这非常有用,其中后两个都是es5中新增的方法。
本文会用到一些es5的对象知识,如果你不了解,可以看一下开头提到的文章,首先我们需要一个父对象。
var parent = Objectcreate(Objectprototype, {
a: {
value: 1,
writable: true,
enumerable: true,
configurable: true
}
});
parent继承自Objectprototype,有一个可枚举的属性a。下面我们在创建一个继承自parent的对象child。
var child = Objectcreate(parent, {
b: {
value: 2,
writable: true,
enumerable: true,
configurable: true
},
c: {
value: 3,
writable: true,
enumerable: false,
configurable: true
}
});
child有两个属性b和c,其中b为可枚举属性,c为不可枚举属性。
下面我们将用四种方法遍历child对象,来比较四种方法的不同。如下的代码代表程序的输出。
consolelog('yanhaijing is God');
// > yanhaijing is God
注:⑤代表es5中新增的方法,你可能需要一款现代浏览器来访问。
for in
for in是es3中就存在,最早用来遍历对象(集合)的方法。
for (var key in child) {
consolelog(key);
}
// > b
// > a
从输出可以看出,for in会输出自身以及原型链上可枚举的属性。
注意:不同的浏览器对for in属性输出的顺序可能不同。
如果仅想输出自身的属性可以借助 hasOwnProperty。可以过滤掉原型链上的属性。
for (var key in child) {
if (childhasOwnProperty(key)) {
consolelog(key);
}
}
// > b
上面的代码,仅输出了child自己的可枚举属性b,而没有输出原型parent中的属性。
Objectkeys⑤
Objectkeys是es5中新增的方法,用来获取对象自身可枚举的属性键。
consolelog(Objectkeys(child));
// > ["b"]
可以看出Objectkeys的效果和for in+hasOwnProperty的效果是一样的。
ObjectgetOwnPropertyNames⑤
ObjectgetOwnPropertyNames也是es5中新增的方法,用来获取对象自身的全部属性名。
consolelog(ObjectgetOwnPropertyNames(child));
// > ["b", "c"]
从输出可以看出其和Objectkeys的区别。
总结
相信看完后,搞不清楚的同学应该明白了,在es3中,我们不能定义属性的枚举性,所以也不需要那么多方法,有了keys和getOwnPropertyNames后基本就用不到for in了。
如果你想在老旧浏览器中也是用这些方法,那试试es5shim吧。
数组是一个可以存放相同类型的多个元素对象的有序线性列表,这些元素可以是任意类型,也可以是元组。但是如果在一个数组中出现在了与其他元素类型不同的元素,那么编译器就会报错。
swift 中还提供了+ *** 作符,可以把两个数组拼接在一起,组成一个新的数组。
数组对象的元素访问:如果访问指定元素,可以通过下标 *** 作符[]来获得,若索引值超出了数组本身大小,那么程序会引发异常
count:获取数组个数
isEmpty:判断数组是否为空
contains( :):判断数组是否包含某个元素
append( :):在该变量数组最后面添加元素
insert(_:at:):在该变量数组指定位置添加元素,原本的元素被移动到新元素后面
remove(at:):在该变量数组中移除指定位置的元素
注意:数组字面量(例如:[1,2,3]),本身是一个常量,如果我们对数组字面量进行添加等 *** 作,则会引起编译器报错。
一个集合也能存放多个相同类型的元素,与数组不同的是:
1:一个集合不允许出现两个相同的元素
2:集合中的元素是无序的
3:并不是所有的类型对象都能作为集合的元素,不过swift的基本类型都可以
元素集合的访问不能像数组通过索引值,因为它是无序的,可以通过for-in循环,也可以通过flatMap方法,有选择性的将集合元素取出。
count:获取集合个数
isEmpty:判断集合是否为空
contains( :):判断集合是否包含某个元素
insert( :at:):在该变量集合指定位置添加元素,如以存在,原本的元素被覆盖,保证唯一性
remove(at:):在该变量集合中移除指定位置的元素
字典与数组和集合不同,它是以一种键-值对的形式存储元素的,字典中不允许出两个相同的键,但是不同的键可以对应相同的值,字典的元素也是无序的。字典中键的类型与值的类型都是在声明中直接确定的,每个键的类型应该一致,每个值的类型也应该一致,键的类型和值的类型可以相同也可以不同。
对字典的值的访问类似于数组对元素的访问,可以通过下标 *** 作符对字段的值进行访问,例如对于一个这样的字典对象dict[String :Int],我们可以通过dict["String"] 的方式来访问键“String”对应的值,不过这里得到的值是一个Optional对象,因为如果指定的键对应的值不存在,会返回空。
count: 获取字典的键值对元素个数
isEmpty:判断字典是否为空
keys:获取字典对象的所有键值
values:获取字典对象的所有值
updateValue(_:forKey:):更新一个键对应的值
removeValue(forKey:): 将指定的键的元素移除
注意:这里的keys和values返回的类型为LazyMapCollection,它与集合类型类似,不能通过下标访问元素,一般通过for-in循环迭代访问;变量字典还能通过调用下标方式来新增一个键值对或修改一个键对应的值。
keys返回的是包含所有键的一个列表,而字典名本身代表字典这个对象。之所以for循环能直接作用于字典名上是因为字典类中实现了iter()方法,它会返回一个迭代器,这个迭代器能逐一返回字典中的每个键。
for 循环在平时开发中使用频率最高的,前后端数据交互时,常见的数据类型就是数组和对象,处理对象和数组时经常使用到 for 遍历,因此需要彻底搞懂这 5 种 for 循环。它们分别为:
1、for
for 循环是出现最早,也是应用最普遍的一个遍历,能够满足绝大多数的遍历。可以遍历 数组、对象、字符串,示例:
2、for in
for in 是在 ES5 中新增的,以任意顺序迭代一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。
3、for of
for of 语句在可迭代对象(包括 Array、Map、Set、String、TypedArray、arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
4、for awaitof
创建一个循环,该循环遍历异步可迭代对象以及同步可迭代对象,包括内置的 String、Array,类数组对象(arguments 或 nodeList),TypedArray, Map, Set 和用户定义的异步/同步迭代器。
它使用对象的每个不同属性的值调用要执行的语句来调用自定义迭代钩子。
类似于 await 运算符一样,该语句只能在一个async function 内部使用
5、forEach
forEach 是ES5版本发布的,按升序为数组中含有效值的每一项执行一次回调函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上),一般认为是 普通for循环 的加强版。
6、map
遍历时可以返回一个新数组,新数组的结果是原数组中每个元素都调用一次提供的函数后返回的值。
1、使用场景差异
for循环是最早最原始的循环遍历语句,for 内部定义一个变量,按照条件进行循环遍历,通常是数组的长度,当超过长度时就停止循环,一般遍历的都是数组或类数组。
遍历对象时,由于对象没有长度,所以使用 Objectkeys() 获取对象的所有属性,以数组形式返回。
for / in主要是用来遍历对象上的可枚举属性,包括原型对象上的属性,按任意顺序进行遍历,遍历对象时获取到的是属性的键值,遍历的是数组,数组的下标当做键值。
for / of用于遍历可迭代对象的数据,包括 Array、Map、Set、String、TypedArray、arguments 对象等等。
for awaitof用于遍历异步可迭代对象,该语句只能在一个async function 内部使用。
forEach 是 for 的加升级版,使用更简单,携带参数更多,但本质还是数组的循环,每个元素都执行一次回调,不会改变原数组。
map是给原数组每个元素都执行一次回调,返回一个新数组,不会改变原数组。
2、功能差异
forEach、map 不支持跳出循环,其他不支持。
for await of 能够支持异步 *** 作,其他的不支持。
对于纯对象的遍历, for in 枚举更方便。
对于数组遍历,如果不需要索引,可以直接使用 forof 获取值,还可支持 break 或 return ;如果还需要索引,使用 forEach 更适合,但不支持 return。
如果是一个数组映射成另一个数组,使用 map 最合适。
3、性能差异
在测试环境、测试数据条件一致的情况下,性能排序为:
for > for of > forEach > map > for in。
for 因为没有额外的函数调用和上下文,所以性能是最快的。
for of 具有 iterator 接口的数据结构,可以使用它来迭代成员,直接读取键值。
forEach 是 for 的语法糖,还有许多的参数和上下文,因此会慢一些。
map 因为它返回的是一个等长的全新数组,数组创建和赋值产生的性能开销较大。
forin 性能最差,因为需要列举对象的所有属性,有转化过程,开销比较大。
在项目开发中,我们应该根据实际需求,去选择一个合适的 for 遍历。以下是一些使用建议:
如果需要把数据映射成另外一个数组,如变成对应布尔值,推荐使用 map ,不会修改原数组,使用语法简单。
数组遍历时,可以使用 for 、forEach 或 forof。
遍历的是纯对象时,推荐使用 for in 。
如果是需要对迭代器遍历,推荐使用 for of。
如果是在数组中筛选符合条件的数组,使用 fillter 。
以上就是关于Javascript怎么获取一个对象的属性的名子全部的内容,包括:Javascript怎么获取一个对象的属性的名子、对象的长度怎么获取 jquery、jQuery如何获取和计算对象的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)