JS14-重复次数(字符串、数组)

作业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){
    // obj[v] === undefined , 证明 obj中,没有当前v这个属性
    // 新增单元 v 属性值是1,表示第一次出现
    // !obj[v] 也是可以的 因为 开始的时候不存在属性,执行结果的是undefined,转化为布尔值就是false,此时只有true才能触发if后面的语句,所以取反

    // 此时的 undefined 是一个数值 , 不能加引号,加引号是字符串undefined
    if(obj[v] === undefined ){
        obj[v] = 1;
    }else{
    // 证明 obj 中已经有 v 这个属性了,属性值也就是表示的次数,要 ++
    // obj[v]++  --->  obj[v] = obj[v]+1 在原始数值基础上加1
        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){
    // console.log(index);
    // console.log(str[index]);
    // forEach 获取数据 直接是 v
    // for...in 获取数据是 str[index]

    // 对象中,是否有,字符对应的属性
    if( obj2[ str[index] ] === undefined ){
        // forEach 是 obj[ v ] = 1; 
        // 现在 forin中 获取 v 的方式 是 str[index]
        obj2[ str[index] ] = 1;
    }else{
        obj2[ str[index] ]++;
    }
}
console.log(obj2);

循环输出结果
for(var attr in obj2){
    document.write( `字符${attr},出现了${obj2[attr]}次` + '<br>'  );
}

在这里插入图片描述

发布了103 篇原创文章 · 获赞 4 · 访问量 2027

猜你喜欢

转载自blog.csdn.net/DcTbnk/article/details/105104324