前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js小题目(持续更新)

js小题目(持续更新)

作者头像
mcq
发布2018-06-20 14:26:44
1K0
发布2018-06-20 14:26:44
举报

总是感觉之前做过的问题很久没碰的话就会忘掉,于是打算专门开一个记录小题目的随笔当题典用。

目录

五种主要数据类型进行值复制 数组去重 数组去重并计数


实现clone()方法,对五种主要数据类型进行值复制

Object、Array、Boolean、Number、String

分为三种情况:普通变量,Array,Object

因为array和object里也可能包含引用类型,所以递归调用

代码语言:javascript
复制
function clone(obj){
    var copy;
    if(obj instanceof Array){
        copy=[];//用空数组来一个一个接收数据
        obj.forEach(function(value,index){
            copy[index] = clone(obj[index]);
        })
        return copy;
    }else if(obj instanceof Object){
        copy = {};//用空对象来一个一个接收数据
        for(var i in obj){
            copy[i]=clone(obj[i]);
        }
        return copy;
    }else{//值类型直接赋值
        return obj;
    }
}

数组去重

代码语言:javascript
复制
Array.prototype.delRepeat = function() {
    var res = [];//创建一个新的数组存放结果
    var json = {};//创建一个空对象
    for(var i = 0; i < this.length; i++) {//每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复
        if(!json[this[i]]) {
        res.push(this[i]);
        json[this[i]] = 1;
        }
    }
    return res;
}

var arr = [12, 13, 3, 'haha', 13, 12, 4, 'haha', 'hi', 'hihi'];
alert(arr.delRepeat());

不过这样有个很大的问题,就是字符串 '123' 和 数值123 会被当作相同元素被跳过。

于是可以做如下的修改:

代码语言:javascript
复制
Array.prototype.delRepeat = function() {
    var res = [];//创建一个新的数组存放结果
    var json = {};//创建一个空对象
    var strFlag = '';//判断是否为字符串的标记
    for(var i = 0; i < this.length; i++) {//每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复
        if(typeof this[i] == 'string' ) {  
            strFlag = 'str_';  
        } else {  
            strFlag = '';  
        } 
        if(!json[strFlag+this[i]]) {
        res.push(this[i]);
        json[strFlag+this[i]] = 1;
        }
    }
    return res;
}

var arr = [12, 13, 3, 'haha', 13, '12', 4, 'haha', 'hi', 'hihi'];
alert(arr.delRepeat());

数组去重并计数

统计数组["番茄炒蛋","泡椒牛柳","香干肉丝","番茄炒蛋","香干肉丝","蜜汁鸡腿"]中各个菜的个数。

代码语言:javascript
复制
function test(arr) {
    var hash = {};
    var str = arr.toString();
    str.replace(/[\u4E00-\u9FA5\uF900-\uFA2D]+/g, function($1) {//正则是匹配中文(包括了中日韩文)
    if($1 in hash)
        hash[$1]++;
    else
        hash[$1] = 1;
    });
    return hash;
}
var arr = ["番茄炒蛋","泡椒牛柳","香干肉丝","番茄炒蛋","香干肉丝","蜜汁鸡腿"];
console.log(test(arr));

具体的匹配中文及字符方法:/[\u4E00-\u9FA5\uF900-\uFA2D]/ 说明: u4e00-u9fbf : unicode CJK(中日韩)统一表意字符。u9fa5后至u9fbf为空 uF900-uFAFF : 为unicode CJK 兼容象形文字 。uFA2D后至uFAFF为空

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
    • 实现clone()方法,对五种主要数据类型进行值复制
      • 数组去重
        • 数组去重并计数
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档