作业1:获取数组中,数值出现的次数
说明:
1,如果从数组中,获取不存在的索引,从对象中获取不存在的属性
执行结果都是 undefined
只要执行结果是 undefined 证明对象中是没有这个键名/属性
调用数组的数据和对象的数据,与调用 字符串,数值,布尔值等基本数据类型不同
数组和对象是 引用数据类型,有特殊的存储方式,调用的结果也是不同的
你只要记住,调用数组的索引,调用对象的属性,如果不存在是 undefined , 不是报错
循环遍历这个数组,获取数组中的数据
将这个数据作为 对象的属性,进行写入
对象的属性,就是数组的数据
对象的属性值,第一次写入是,是这个数据第一次出现,属性值就是1
之后再次出现,给属性值值做 ++ 自增1 的操作
var arr = [1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,5,6,7,1,2,3,4,5,6,7,8];
var obj = {};
arr.forEach(function(v){
if(obj[v] === undefined ){
obj[v] = 1;
}else{
obj[v]++;
}
})
console.log(obj);
复习: 不能加引号的,看上去是一串字符,其实是表示数值的内容
true false null undefined NaN
var obj = { name } 有name属性,但是没有赋值
var obj = {age:18} 没有name属性
2.字符串(此方法数组也可以用)中字符出现的次数 --- 原理相同
字符串是包装类型,只是一个伪数组,并不能具有数组的所有属性
不能使用forEach(),循环遍历
可以使用for...in来循环遍历字符串
可以在for...in中自定义变量,来存储,字符串中,字符的索引下标
var str = 'abcdabcdeabcdefabcedefg';
var obj2 = {};
index 存储的 索引下标
str[index] 就是 索引下标对应的字符
for(var index in str){
if( obj2[ str[index] ] === undefined ){
obj2[ str[index] ] = 1;
}else{
obj2[ str[index] ]++;
}
}
console.log(obj2);
循环输出结果
for(var attr in obj2){
document.write( `字符${attr},出现了${obj2[attr]}次` + '<br>' );
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8438fb86da861820adb293f775fc63ab.jpeg)