js内置对象

250 阅读3分钟

not finished

MDN

js内置对象

值属性

  • Infinity
  • NaN
  • undefined
  • null字面量
  • globalThis 基本对象
  • Object
  • Function
  • Boolean
  • Symbol
  • Error
  • Number
  • Math
  • Date
  • String
  • RegExp
  • Array
  • Map
  • Set

Array

fill(value,start,end)

start:0 default,end:length default 替换填充,返回新的数组,包前不包后。如果是负数+length

[1, 2, 3].fill(4);               // [4, 4, 4]
[1, 2, 3].fill(4, 1);            // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
Array(3).fill(4);                // [4, 4, 4]
[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}

find

返回数组中符合条件的第一个值,无就undefined
不支持IE

const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
  • findIndex()返回数组中找到元素的索引
  • arr.indexOf()找一个元素的索引,无就返回-1
    IE9+
    参数:val,fromIndex
    fromIndex:-1,从倒数第一个开始找
  • arr.includes()判断一个元素是否存在于数组中
    存在返回true,否则返回false
    不支持IE

flat()——数组降维

按照一个可指定的深度递归遍历数组,返回一个新数组。
参数:1 default,Infinity
不兼容IE

  • 扁平化嵌套数组
var arr1 = [1, 2, [3, 4, [5, 6]]];
arr1.flat();
// [1, 2, 3, 4, [5, 6]]

//使用 Infinity,可展开任意深度的嵌套数组
var arr2 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr2.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 扁平化与数组空项 flat()会移除数组中的空项
var arr3 = [1, 2, , 4, 5];
arr3.flat();
// [1, 2, 4, 5]

移除数组空项 +扁平化

forEach遍历数组会自动跳过空元素

var eachFlat = (arr=[],depth=1)=>{
    var result = [];
    //开始递归
    (function flat(arr,depth){
        //forEach会自动去除数组空位
        arr.forEach((item)=>{
            //控制递归深度
            if(Array.isArray(item)&&depth>0){
                //递归数组
                flat(item,depth-1)
            } else {
                //缓存元素
                result.push(item)
            }
        })
    })(arr,depth)
    return result;
}

for of 循环不能去除数组空位,需要手动去除

var forFlat = (arr=[],depth=1)=>{
    var result = [];
    (function flat(arr,depth){
        for(let item of arr){
            if(Array.isArray(item)&&depth>0){
                flat(item,depth-1)
            }else{
                //去除空元素,添加非undefined元素
                item !== void 0 && result.push(item)
            }
        }
    })(arr,depth);
    return result;
}

使用堆栈stack降维

function flatten(input){
    var stack = [...input];
    var res = [];
    while(stack.length){
        var next = stack.pop();
        if(Array.isArray(next)){
            stack.push(...next);
        }else{
            res.push(next);
        }
    }
    //反转恢复原数组的顺序
    return res.reverse();
}
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

Generator+循环降维

function* flatten(array){
    for(var item of array){
        if(Array.isArray(item)){
            yield* flatten(item);
        } else{
            yield item;
        }
    }
}
var arr = [1, 2, [3, 4, [5, 6]]];
const flattened = [...flatten(arr)];
// [1, 2, 3, 4, 5, 6]

join()和split()

var arr = [1, 2, [3, 4, [5, 6]]];
var str = arr.join();//"1,2,3,4,5,6"
var temp = split(',');//["1", "2", "3", "4", "5", "6"]
var res = temp.map((val)=>{
    return Number(val);
});//[1, 2, 3, 4, 5, 6]

缺点:会改变数据类型

reduce()

参数:reducer函数,返回单个返回值
reducer(acc,cur,index,array)

  • accumulator 累积器
  • currentValue 当前值
  • index(可选) 当前索引
  • array(可选) 源数组
var arr = [1,2,3,4];
var reducer = (acc,cur)=>acc+cur;
//1+2+3+4
console.log(arr.reduce(reducer));//10
//5+1+2+3+4
console.log(arr.reduce(reducer,5));//15

将二维数组降为一维

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
 ( acc, cur ) => acc.concat(cur),
 []
);

计算数组中每个元素出现的次数

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function(allNames,name){
    if(name in allNames){
        allNames[name]++;
    } else {
        allNames[name] = 1;
    }
    return allNames;
},{});
//countedNames
{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

按属性对object分类

var people = [
  { name: 'Alice', age: 21 },
  { name: 'Max', age: 20 },
  { name: 'Jane', age: 20 }
];
function groupBy(objectArray,property){
    return objectArray.reduce(function(acc,obj){
        var key = obj[property];
        if(!acc[key]){
            acc[key]=[];
        }
        acc[key].push(obj);
        return acc;
    },{});
}
var groupPeople = groupBy(people,'age');
/*
 groupedPeople is:
 { 
   20: [
     { name: 'Max', age: 20 }, 
     { name: 'Jane', age: 20 }
   ], 
   21: [{ name: 'Alice', age: 21 }] 
}*/

not ending

数组去重

arr.slice(start,end) 裁剪

arr.splice()

删除,替换,增加
splice(start,end,新增)