用 apply 将数组各项添加到另一个数组
const array = ['a', 'b'];
const elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array);
函数只执行一次
function once (fn){
let called = false
return function () {
if (!called) {
called = true
fn.apply(this, arguments)
}
}
}
function func (){
console.log(1);
}
let onlyOnce = once(func);
onlyOnce();
onlyOnce();
防抖
let timeout;
function Debounce(func, wait = 3000, immediate = true) {
if (timeout !== null) clearTimeout(timeout);
if (immediate) {
var callNow = !timeout;
timeout = setTimeout(function() {
timeout = null;
}, wait);
if (callNow) typeof func === 'function' && func();
} else {
timeout = setTimeout(function() {
typeof func === 'function' && func();
}, wait);
}
}
Debounce(()=>console.log(1));
递归数组降为一维
let children = [1, [2, 3], [4, [5, 6, [7, 8]]], [9, 10]];
function simpleNormalizeChildren(children) {
for (let i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
children = Array.prototype.concat.apply([], children);
simpleNormalizeChildren(children)
}
}
return children;
}
console.log(simpleNormalizeChildren(children));
数组降维(二维降一维)
function simpleNormalizeChildren(children) {
for (let i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
return Array.prototype.concat.apply([], children)
}
}
return children
}
let arrs = [['1'],['3']];
const arr = simpleNormalizeChildren(arrs);
console.log(arr);
使用可选链进行函数调用
function doSomething(onContent, onError) {
try {
}
catch (err) {
onError?.(err.message);
}
}
检测数组对象中是否有空值
const data = [
{
name:"maomin"
},
{
name:""
}
]
const arr = data.filter(item =>
Object.values(item).includes('')
);
console.log(arr.length>0?"有空值":"无空值");
计算数组中每个元素出现的次数
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
}
return allNames;
}, {});
console.log(countedNames);
按属性对object分类
let people = [
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
];
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property];
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {});
}
const groupedPeople = groupBy(people, 'age');
console.log(groupedPeople);
将带有分割符的字符串转化成一个n维数组
const str = "A-2-12";
const str1 = str.split('-');
console.log(str1);
const arr = str1.reverse().reduce((pre,cur,i) => {
if(i==0)
{ pre.push(cur)
return pre
}
return [cur,pre]
},[])
console.log(arr)