记录平时工作中常用的一些js小技巧。
判断对象是否为数组
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
将类数组对象转为数组
方法一:
Array.prototype.slice.call(arrayLike);
方法二:
Array.from(arrayLike)
方法三:
[...arrayLike]
数组去重
[...new Set([1, "1", 2, 1, 1, 3])] // [1,'1',2,3]
取出一个数组中的最大值和最小值
var numbers = [5, 62 , 129 , -21 , 152 , 600 , 18555, -155];
var maxInNumbers = Math.max.apply(Math, numbers);
var minInNumbers = Math.min.apply(Math, numbers);
判断是否是在微信环境
function isWxEnv(){
return (navigator.userAgent.toLowerCase().indexOf('micromessenger') > -1) ? true : false;
}
交换俩对象的值
let a = 1, b = 2;
[a, b] = [b, a];
金钱格式化
var test1 = '1234567890'
var format = test1.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
多维数组拍平成一维数组
var a=[1, [[2], 3, 4], 5];
a.toString().split(','); //["1", "2", "3", "4", "5"]
数组浅拷贝
浅拷贝是拷贝引用,只是将拷贝后的引用指向同一个对象实例,彼此间的操作还会互相影响
方法一:
var a=['old', 1, true, null, undefined];
var b=a.slice();
方法二:
var a=[{a:3}, 1, true, null, undefined];
var b=a.concat();
a[0].a=5;
console.log(b[0].a); //5
方法三:
var shallowCopy = function(obj) {
if (typeof obj !== 'object') return;
var newObj = obj instanceof Array ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
}
}
return newObj;
}
对象浅拷贝
方法一:
let a = { b: {c:4} , d: { e: {f:1}} }
let g = Object.assign({},a)
深拷贝数组
深拷贝,在堆中重新分配内存,并且把源对象所有属性都进行新建拷贝,拷贝后的对象与原来的对象完全隔离,互不影响。
方法一:
let arr = ['old', 1, true, ['old1', 'old2'], {old: 1}]
let new_arr = JSON.parse( JSON.stringify(arr) );
(问题:不能拷贝函数)
该方法同样适用于对象,问题也是一样,不能拷贝函数
let a = { b: {c:4} , d: { e: {f:1}} }
let h = JSON.parse(JSON.stringify(a));
方法二:
var deepCopy = function(obj) {
if (typeof obj !== 'object') return;
var newObj = obj instanceof Array ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
}
}
return newObj;
}