Array
Array.prototype.every()
- 对每个值做判断,全部满足返回true,否则返回false
const all = (arr,fn=Boolean) => arr.every(fn);
all([1,2,3,4]) // true
all([1,2,3,4,""]) // false
all([1,2,3,4,5],item => item > 3) // false
- 检查每个值是否相等
const allEqual = arr => arr.every(item => item === arr[0]);
allEqual([1,'2','1',2]) // false
allEqual([NaN,NaN]) // false
Array.prototype.some()
- 有符合条件的就返回 true
const any = (arr,fn=Boolean) => arr.some(fn);
Array.prototype.map()
- 把二位数组转换为字符串
const ArrayToString = (arr,dilimiter) => {
return arr
.map(item => item.join(dilimiter))
.join(dilimiter);
};
const ArrayToString = (arr,dilimiter) => arr.map(item => item.join(dilimiter)).join(dilimiter);
Array.prototype.reduce()
- 分组 bifurcate
// 三目运算,reduce
const bifurcate = (arr,filter) => arr.reduce((acc,item,index) =>{acc[filter[index]?0:1].push(item);return acc;},[[],[]]);
// 常规
function group(arr,filter) {
const result = [[],[]];
filter.forEach((item,index) => {
item?result[0].push(arr[index]):result[1].push(arr[index]);
// if(item){
// result[0].push(arr[index]);
// }else {
// result[1].push(arr[index]);
// }
})
return result;
}
- bifurcateBy
const bifurcateBy = (arr, fn) => arr.reduce((acc, item, index) => { acc[fn(item) ? 0 : 1].push(item); return acc; }, [[],[]]);
- count
const count = (arr,value) => arr.reduce((acc,item) => item === value?acc+1:acc,0)
- [1,2,3,4,5,6,2,1,100] 找出数组中的最大值
// 方法一 遍历数组
const array_max = arr => arr.reduce((acc,item) =>item>acc?acc = item:acc ,-Infinity)
const arr = [-1,-2,-3,-4,-5,-6,-7];
array_max(arr) // -1
// 方法二 Math.max() tips:参数长度有限制
const max = Math.max.apply(null,arr) // -1
// 方法三 先排序,取出最后一个
const array_sortMax = arr => {
return arr.sort((x,y) =>x-y )[arr.length-1];
}
Array.prototype.from()
- 把数组分割成指定大小
// 把数组分割成指定大小
const chunk = (arr, size) =>
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
arr.slice(i * size, i * size + size)
);
- 随机生成一个指定大小,指定范围的数组
function randomArray(min,max,length) {
return Array.from({length:length},item => item = getRandomIntInclusive(min,max));
}
// 生成min -max之间的随机数 [min,max)
function getRandomInt(min,max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random()*(max-min) + min);
}
// 生成min -max之间的随机数 [min,max]
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
}
Array.prototype.filter()
// 返回 真值
const filter_falsey = arr => arr.filter(Boolean);
- 从两个数组中导出没有重复的值(arr1,arr2)
// 写法一 Set.has()
const diff = (arr1,arr2) => {
const set = new Set(arr1);
return arr2.filter(item =>!set.has(item) );
}
// 写法二 Array.includes()
const diffArray = (arr1,arr2) => {
// 排除arr1 里面的重复值
const set = [...new Set(arr1)];
// 此处不能用indexOf(),indexOf判断不了NaN
return arr2.filter(item => !set.includes(item));
}
const arr2 = [1,2,3,4,5,null,NaN,undefined,""],
arr1 = [1,2,3,4,6];
console.log(
diff(arr1,arr2), // [ 5, null, NaN, undefined, '' ]
diffArray(arr1,arr2), // [ 5, null, NaN, undefined, '' ]
)
- 传入函数,遍历处理,再返回不一样的值(arr1,arr2,fn)
const diffBy = (ar1,arr2,fn) => {
const set = new Set(arr1.map(fn));
return arr2.map(fn).filter(item => !set.has(item))
}
const arr1 = [1,7,9,3,4],
arr2 = [7,8,9,10];
console.log(
diffBy(arr1,arr2,item => item+10 ) // [ 18, 20 ]
)
Array.prototype.concat()
- 多维数组,转换为一维数组
// 递归
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));
// 数组转换为字符串,字符串转换为数组
const fn = arr => arr.join().split(',');
// 例子
let arr = [1, 2, [3, 4, 5, [1, 2, 3, 4, 5, 6]]];
console.log(
deepFlatten(arr), // [ 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6 ]
fn(arr), // [ '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '6' ]
)
- 拼接数组
let arr1 = [1,2,3,4],
arr2 = [5,6,7,8];
arr1.concat(arr2); // 返回新的数组 [1, 2, 3, 4, 5, 6, 7, 8]
[].push.apply(arr1,arr2) // 改变原数组arr1 arr1 [1, 2, 3, 4, 5, 6, 7, 8]
[...arr1,...arr2] // [1, 2, 3, 4, 5, 6, 7, 8]
原文: