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,新增)