数组常用实例封装(上)
大家在开发的时候应该知道,有很多常见的实例操作。比如数组去重,打乱数组等。这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了。但是,用的地方会比较,如果项目有哪个地方需要用,如果重复写的话,就是代码沉余,开发效率也不用,复用基本就是复制粘贴!这样是一个很不好的习惯,大家可以考虑一下把一些常见的操作封装成函数,调用的时候,直接调用就好!
1.数组去重
//方法一:
function removeRepeatArray(arr) {
return arr.filter(function (item, index, self) {
return self.indexOf(item) === index;
});
}
//方法二:
var removeRepeatArray = (arr) => {
return Array.from(new Set(arr))
}
//方法三:
var removeRepeatArray = (arr) => {
return [...new Set(arr)]
}
2.数组最大值
//方法一:
function maxArr(arr) {
return Math.max.apply(null, arr);
}
//方法二:
var maxArr = (arr) => {
return Math.max(...arr);
}
3.数组最小值
//方法一:
function minArr(arr) {
return Math.min.apply(null, arr);
}
//方法二:
var maxArr = (arr) => {
return Math.min(...arr);
}
4.数组求和
//方法一:递归
function sum(arr) {
var len = arr.length;
if (len == 0) {
return 0;
} else if (len == 1) {
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
//方法二:常规循环
function sum(arr) {
var s = 0;
for (var i = arr.length - 1; i >= 0; i--) {
s += arr[i];
}
return s;
}
//方法三:函数式编程
function sumArr(arr) {
return arr.reduce(function (pre, cur) {
return pre + cur
})
}
//方法四:forEach循环
function sum(arr) {
var s = 0;
arr.forEach(function (val, idx, arr) {
s += val;
}, 0);
return s;
};
//方法五:eval
function sum(arr) {
return eval(arr.join("+"));
};
5.数组顺序打乱
//方法一:
function upsetArr(arr) {
return arr.sort(function () {
return Math.random() - 0.5
});
}
//方法二:
var upsetArr = (arr) => {
let j, _item;
for (let i = 0; i < arr.length; i++) {
j = Math.floor(Math.random() * i);
_item = arr[i];
arr[i] = arr[j];
arr[j] = _item;
}
return arr;
}
6.数组中随即获取元素
//方法一:
function randomOne(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
//方法二:
var randomOne = (arr) => {
let j, _item;
for (let i = 0; i < arr.length; i++) {
j = Math.floor(Math.random() * i);
_item = arr[i];
arr[i] = arr[j];
arr[j] = _item;
}
return arr;
}