之前有人问过我类似的问题,我想当然的说直接利用JSON.stringify()方法转化成字符串来获取字符串长度就可以了,但是后来有个问题需要用到获取json对象键长度的时候发现这个方法仅仅限于json的键长度相等,值长度也一一对应的情况,太过于局限,根本不实用,查了好些文档,找的两种方法,在这边整理一下,方便遇到同样问题的朋友来查看,也提醒自己记住这个问题。
第一种方法可能大部分人都能够想得到,就是利用for。。。in循环遍历json对象的键,如果json里面存在,则计数器加1,直到结束。代码如下:
<script>
var json={"a":1,"b":2,"c":3,"d":4};
var count = 0;
for(var key in json){
if(json.hasOwnProperty(key)){
count++;
}
}
console.log("json的键长度为"+count)
</script>
第二种方式相对于第一种简单一些,只需要通过Object.keys( )将json对象的键全部存到返回的数组中,调用length方法求长度可以,写起来较第一种更简单,代码如下:
<script>
var json={"a":1,"b":2,"c":3,"d":4};
var count = Object.keys(json).length;
console.log("json的键长度为"+count);
</script>
关于Object.keys(obj)方法的介绍简单记录一下:
返回值:一个表示给定对象的所有可枚举属性的字符串数组。这些属性的顺序与手动遍历该对象属性时的一致。
扩充:如果你想获取一个对象的所有属性,,甚至包括不可枚举的,请查看Object.getOwnPropertyNames
。
另外:
在ES5里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出 TypeError。在ES2015中,非对象的参数将被强制转换为一个对象。
即时更新:
Object.entries()方案
利用es8新特性:通过object的entries方法,可以直接获取给定对象自身可枚举属性的键值对的数组
const a = {one: 1, two: 2, three: 3};
const arr = Object.entires(a);
// 此时 arr = [{one: 1}, {two: 2}, {three: 3}]
console.log(`a的健长度为:${arr.length}`)