修改数组的性质
- 以数组长度length为例
- 数组对象的length属性是一个数据属性,该属性的值始终从数值上大于所属数组的任何一个索引号.
- length属性的特性为
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }
只读性 writable
const list = [1, 2, 3, 4];
list.length
list.length = 5;
list
Object.defineProperty(list,"length", {
writable: false;
});
list.length = 1;
list
可配置性 configurable
const array = [5, 4, 3, 2];
Object.defineProperty(array, 'length', {value: 3});
array
Object.defineProperty(array, 'length',{
configurable:false,
writable:false,
value:'1',
});
array
array.length = 5;
Object.defineProperty(array, 'length', {value: 3})
可枚举性 enumerable
const array = ['zhao', 'qian', 'sun', 'li'];
for (let i in array) {
console.log(array[i])
}
Object.defineProperty(array, 'length', {
enumerable:false,
})
for (let i in array) {
console.log(array[i])
}
数组的方法
Array.from() 将 伪数组 or 可迭代对象 转化为数组
Array.from('hello');
let set = new Set(['hello', 'world']);
Array.from(set);
Array.from([1, 2, 3], x => x * 2);
Array.prototype.some/every() 至少有一个 / 所有成员是否都通过指定函数的测试
[90, 85, 25, 55.9, 100, 61].some(score => score > 60)
[90, 85, 25, 55.9, 100, 61].every(score => score > 60)
const family = ['father', 'mother', 'son', 'doggy'];
const isExist = (arr, checkItem) => {
return arr.some(member => checkItem === member);
}
isExist(family, 'father');
isExist(family, 'catty');
Array.prototype.flat() 以指定深度递归遍历数组,并返回一维数组(扁平化)
var arr1 = [1, 2, [3, 4]];
arr1.flat();
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
arr3.flat(Infinity);
const arr4 = [1, [2, 3],[[4, [5, 6]], 7]];
const filter = arr => Array.from(new Set(arr.flat(Infinity)));
filter(arr4);
Array.prototype.reduce() 累加器 数组成员生序执行所提供函数
var array = [0, 1, 2, 3].reduce(
( acc, currentVal ) => acc + currentVal,
0
);
const double = val => val * 2;
const triple = val => val * 3;
const quadruple = val => val * 4;
const pipe = (...functions) => input => functions.reduce(
(acc, fn) => fn(acc),
input
);
const multiply6 = pipe(double, triple);
const multiply9 = pipe(triple, triple);
const multiply16 = pipe(quadruple, quadruple);
const multiply24 = pipe(double, triple, quadruple);
multiply6(6);
multiply9(9);
multiply16(16);
multiply24(10);
关于本文
- 文章非摘录,经浏览文档,以自己的理解进行,代码测试,手打书写。
- 用作记录自己曾经学习、思考过的问题的一种笔记。
- 用作前端技术交流分享。
- 阅读本文时欢迎随时质疑本文的准确性,将错误的地方告诉我。本人会积极修改,避免文章对读者的误导。
关于我
- 是一只有梦想的肥柴。
- 觉得算法、数据结构、函数式编程、js底层原理等十分有趣的小前端。
- 志同道合的朋友请关注我,一起交流技术,在前端之路上共同成长。
- 如对本人有任何意见建议尽管告诉我哦~ 初为肥柴,请多多关照~
- 前端路漫漫,技术学不完。今天也是美(diao)好(fa)的一天( 跪了...orz