有用
- 通过循环实现map
const selfMap = function (fn, context) {
let arr = Array.prototype.slice.call(this); // 拷贝原数组
let mappedArr = Array();
for (let i=0; i<arr.length; i++) {
mappedArr[i] = fn.call(context, arr[i], i, this);
}
return mappedArr;
}
Array.prototype.selfMap = selfMap;
console.log([1, 2, 3].selfMap(num=>num*2)); // [2, 4, 6]
数组
-
统计数组中指定元素的出现次数
reduce参数:callback(accumulator, currentValue)、initialValue,即回调(上一次执行返回值,当前元素值)、第一次参数值。详细参看MDN文档
let findValue = 1;
let array = [1, 3, 4, 6, 1, 3, 5, 6, 3, 1];
let valueCnt = array.reduce((a, e)=>{
if (e === findValue) {
a = a+1;
}
return a;
}, 0);
- 统计数组中每个元素出现次数
let nums = [1,2,3,1,1,3];
nums.forEach((ele, idx) => {
map[String(ele)] = map[String(ele)]===undefined ? 0 : map[String(ele)]+1;
});
- 数组去重
let nums = [1,2,3,1,1,3];
let numsUnique = [...new Set(nums)];
- 排序sort,按数组中某个属性值排序
let items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 2 },
{ name: 'Zeros', value: 37 }
];
items.sort((first, second) => {
return first.value - second.value; // 从小到大
});
- 数组中最大值 方法1:
let array = [0, -5, 6, 15, 10];
Math.max(...array);
方法2:
let array = [0, -5, 6, 15, 10];
let max = array.reduce((accu, cur) => {
return Math.max(accu, cur);
});
- 反转数组 直接用reverse()反转数组会导致原数组值的改变,如何在不改变原始数组的情况下反转数组,如下:
方法1、slice+reverse
const origin = [1, 2, 3];
const current = origin.slice().reverse();
方法2、...扩展运算符+reverse
const origin = [1, 2, 3];
const current = [...origin].reverse();
- Array.fill(),可用于初始化数组值
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
字符串
- 去除字符串中的空格
let string = 'hello hello';
string = string.split(' ').join('');
- 判断值是否有小数点
let value = 123.24
if (String(value).indexOf('.') !== -1) {
console.log('存在小数点');
}
- 判断字符串是否纯中文
let string = 'haha你好啊';
let isZn = true;
for (let i = 0; i < string.length; i++){
if (string.charCodeAt(i) <= 255){
isZn = false;
break;
}
}
- 判断字符串是否纯英文
let string = 'hahaHello';
let isEn = string.test(/^[A-Za-z]*$/);
常见
- 十进制转换二进制
// parsetInt里面是要转换的数字,toString里面是要转换的进制
let value = parseInt(12).toString(2); // 12 ---> 1100
- 扩展操作符,可用于合并数组和对象
let a = [1, 2, 3];
let b = [4, 5];
let c = [...a, ...b, 6]; // 值为[1, 2, 3, 4, 5, 6]
let car = { type: 'vehicle ', wheels: 4};
let newCar = {...car}; // 值为{ type: 'vehicle ', wheels: 4}
// 合并对象属性,后边的属性会覆盖前边的,可用于修改对象的某个属性值
let car2 = {...car, type: 'vehicle2', wheels: 2} // {type: "vehicle2", wheels: 2}
- 判断值是否为undefined
let value = undefined;
if (typeof(value) === 'undefined') {
console.log('value is undefined');
}