Javascript常见操作

292 阅读2分钟

有用

  • 通过循环实现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');
}