let arr = [1,3,2,4,5]
let obj = {a:1,b:2,c:3}
function test(){
for (let key in obj) {
if (obj[key]===2) {
console.log('..update',);
// break
return 123
}
console.log('llll');
}
console.log('ffff');
}
// test()
console.log(test());
//llll
//update
//123
for 中的return会跳出循环并跳出方法
forEach中的return会跳出当前,进行下一次循环
/**
* 深度对比两个对象是否所有属性值一致
* @method compare
* @param origin 对象一
* @param target 对象二
* @returns {boolean} 对比结果
*/
function compare(origin, target) {
//判断参数一是否为object类型
if (typeof target === 'object') {
//判断参数二是否不为object类型
if (typeof origin !== 'object') return false;
//判断参数一和参数二的属性数量是否一致 Object.keys(target)当target为null时不可以
if (Object.keys(origin).length !== Object.keys(target).length) return false;
//遍历参数二的所有键
for (let key in target)
//判断参数二的键值和参数一的键值是否一致
if (!compare(origin[key], target[key])) return false;
//参数1和参数2对比一致
return true;
} else return origin === target;//属性值的对比结果
}
改良版:null === null //true;
function compare(origin, target) {
if (typeof target === 'object' && target !== null && origin !== null) {
if (typeof origin !== 'object') return false;
if (Object.keys(origin).length !== Object.keys(target).length) return false;
for (let key in target){
if (!this.compare(origin[key], target[key])) return false;
}
return true;
}
else {
if(isNaN(target) && isNaN(origin)&& typeof x === 'number' && typeof y === 'number'){
return true
}
if(typeof target === 'function' && typeof origin === 'function')){
return target.toString().replace(/\s/g, "") == origin.toString().replace(/\s/g, "");
}
return origin === target;
}
}
var temp1 = {
a: 0,
b: 1,
c: 0
};
var temp2 = {
a: 0,
b: 1,
c: 0
};
console.log(compare(temp1, temp2));
js深浅比较
:深比较,值相同即相同,不看引用关系,eg:{a:1} 和{a:1}同
浅比较:看引用关系
把数组某一项放到最后一项
children.forEach((item, index) => {
if (item.id === 'xxx') {
children.push(children.splice(index, 1)[0])
};
})
// 二维数组排序
function sortHandler(data, key = 'status') {
data.children.forEach(item => {
Array.isArray(item.children) && sortHandler(item)
})
data.children.sort((a, b) => {
return a[key] - b[key]
})
}
数组遇到的bug [].every()
[].every(t=>t.num >0)//true
[].some(t=> t.num >0)//false
// every、some方法不检测空数组
// every 若收到一个空数组,此方法在一切情况下都会返回 true
//some 如果用一个空数组进行测试,在任何情况下它返回的都是false。
正则字符串转换首字母为大写
str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase())
-转驼峰
var s1 = "foo-style-css";
s1 = s1.replace(//-(/w)/g, function(all, letter){
return letter.toUpperCase();
});
驼峰转-
var s = "fooStyleCss";
s = s.replace(/([A-Z])/g,"-$1").toLowerCase();