这些数组技巧,我爱了

前言

数组是Javascript最常见的概念之一,它为我们提供了处理数据的许多可能性。恰当的数组处理技巧能够让我们编码事半功倍,接下来我们就来看看吧。

1.数组去重

前端面试最爱问的问题,哈哈哈。

》判断简单数组元素是否重复

function isRepeat(arr) {
    var hash = {};
    for (var i in arr) {
        if (hash[arr[i]]) {
            return true;
        }
        hash[arr[i]] = true;
    }
    return false;
}

①利用ES6 Set去重
不考虑兼容性就可以用哦。
注:当对象内容相同时,由于存储地址不一样,所以没有去除。

function unique (arr) {
  return Array.from(new Set(arr));  //当然还有它更简单的写法:[...new Set(arr)] 
}
var arr = [1,1,undefined,undefined,null,null,NaN,NaN,{},{}];
console.log(unique(arr))//[1,undefined,null,NaN,{},{}]

②利用indexOf去重
面试官叫手写实现数组去重时本人最最最爱的方法,当然也可以选择splice去重。

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!');
        return;
    }
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array.indexOf(arr[i]) === -1) {
            array.push(arr[i]);
        }
    }
    return array;
}

 还有很多的方法的,这里就写两种吧。

2、空数组

var arr= ["a", "b", "c"];
arr.length = 0;

3、合并数组

①concat
用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

var num1 = [1, 2, 3],
    num2 = [4, 5, 6],
    num3 = [7, 8, 9];
var nums = num1.concat(num2, num3); 

②ES6 扩展操作符(…)

var num1 = [1, 2, 3],
    num2 = [4, 5, 6],
    num3 = [7, 8, 9];
var nums = [...num1, ...num2, ...num3];

4、字符串与数组的相互转换

①字符串转数组 split
用指定分隔符对字符串进行切片,转换为若干个数组元素。

var str = '123,456,789';
var strArr = str.split(',');

split应用:常用于在获取url后指定参数时 

function GetRequest() {  
    var url = location.search.replace(/\s+/g, ""),
        theRequest = {}; 
    if (url.indexOf("?") != -1) { 
       var str = url.substr(1); 
       strs = str.split("&");  
       for(var i = 0; i < strs.length; i ++) {
          theRequest[decodeURI(strs[i].split("=")[0])]=decodeURI(strs[i].split("=")[1]);
       }
    }
    return theRequest;  //以对象方式返回参数值
} 

②数组转字符串 join
用指定分隔符对数组元素进行拼接,转换为一个字符串。

var strArr = ['abc', 'def', 'hig'];
var str = strArr.join(',');  //当分隔符为‘,’时,与toString结果一致

 5、对满足条件的数组元素进行删除

filter
对数组的每一项都运行给定的函数,返回 结果为 ture 的项组成的数组。

var arr = ["apple", "orange","happy"];
var arrRes = arr.filter(function(v){
  return v.length > 5;
});

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值