JavaScript基础案例实现

本文介绍两种JavaScript数组去重方法及其实现原理,并演示如何统计字符串中各字母出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.去除一个数组里面重复的元素

推荐方法1
(1)创建一个新的数组copy,存放去重后的数组;
(2)创建一个空对象json,作为中间件;
(3)遍历原数组arr,每次取出一个元素,访问这个对象json是否存在这个属性,如果有的话就说明重复了,如果没有的话,把这个元素放到结果数组copy中,同时把这个元素作为对象的属性,赋值为1,方便后续元素对比。

var arr = [1,1,22,2,22,22,1,3];
var copy = [];
var json = {};
for (var i = 0; i < arr.length; i++) {
    if (!json[arr[i]]) {
        copy.push(arr[i]);
        json[arr[i]] = 1;
    }
}
console.log(copy);  //  [1, 22, 2, 3]

推荐方法2
Array.indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
(1)创建一个空数组;
(2)遍历原数组的元素,如果在结果数组中可以找到该元素的索引,说明已存在;如果没有,则把该元素放进数组中。

var arr1 = [1,2,2,2,3,3,3,4,5,6];
var arr2 = [];
for(var i = 0, len = arr1.length;i<len;i++){
    if(arr2.indexOf(arr1[i])<0) {
        arr2.push(arr1[i]);
    }
}
console.log(arr2);

运行结果:
[1, 2, 3, 4, 5, 6]

2.在JavaScript中什么是伪数组,怎么将伪数组转化为标准数组

伪数组(类数组):无法直接调用数组方法,也无法使用length属性实现什么特殊的行为,但是!可以使用真正数组遍历的方法(for循环配合数组下标)来遍历它们。说的浅显一些,就是:存在着length属性,可以通过数组下标的方式进行每个元素的访问,但是不能够使用push等数组的方法。

常见的伪数组:
arguments参数:arguments是一个对象,而非一个数组。
调用document.getElementsByTagName、getElementsByClassName等各类获取元素的方法。这些方法返回的是一个NodeList(节点列表),也并不是一个数组。
将伪数组转换为数组
可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

为何能够使用slice实现转换呢?
slice( )方法,是基于当前数组中的一个或多个项,创建一个新数组,并返回新数组。
concat( )方法,是基于当前数组中的所有项创建一个新数组,返回新数组。

3.统计字符串中字母个数或统计最多字母数

var str = 'aaaabbbcccccddfghhh';
var obj = {};
for(var i = 0; i < str.length; i++) {
    var v = str.charAt(i);
    if(obj[v] && obj[v].value == v) {
        obj[v].count = ++obj[v].count;
    }else {
        obj[v] = {};
        obj[v].count = 1;
        obj[v].value = v;
    }
}
for(key in obj) {
    console.log(obj[key].value + '=' + obj[key].count + '');
}

运行结果:
a=4
b=3
c=5
d=2
f=1
g=1
h=3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值