const list = [{id: 100,name: 100, pid: 10}, {id: 20, name: 20, pid: 2}, {id: 1, name: 1}, {id: 2, name: 2}, {id: 10, name: 10, pid: 1}, {id: 11, name:[......]
使用递归将一维数组转换为树型结构
Leave a reply
const list = [{id: 100,name: 100, pid: 10}, {id: 20, name: 20, pid: 2}, {id: 1, name: 1}, {id: 2, name: 2}, {id: 10, name: 10, pid: 1}, {id: 11, name:[......]
本来是想说说生成器Generator的,但我发现和迭代有关,所以要先讲讲迭代器Iterator,可迭代器又会扯到Symbol,所以拉出来一起说说;
Symbol是ES6引进的一种新数据类型,它代表一个独一无二的值,至此JavaScript一共有7种数据类型,分别是:Undefinded
、String
、Symbol
、Object
、Null
、Number
、boolean
。
Symbol到底是什么?先来个栗子看看效果:
let s1 = Symbol();
let s2 = Symbol();
console.log(s1, typeof s1); // Symbol() "symbol"
console.log(s1 === s2); // false
let s3 = Symbol('symbol');
let s4 = Symbol('symbol');
console.log(s3, s4); // Symbol(symbol) Symbol(symbol)
console.log(s3 === s4); // false
let s5 = Symbol.for('symbol');
let s6 = Symbol.for('symbol');
console.log(s5, s6); // Symbol(symbol) Symbol(symbol)
console.log(s5 === s6); // true
console.log(s4 === s5); // false
new
关键字;既然Symbol的特性代表独一无二,那典型的应用场景就是需要唯一性的场所,比如说枚举值、对象的属性名或方法名等。
* 以性别为例,我们定义一个gender
对象,分别有male
和female
两个属性,我们在应用的时候可能只需要区分这两者不一样即可,并不关心他们实际值是多少,可以将值设置为Symbol类型。(如果需要与服务端交互另说,这里主要是为了说明Symbol的用法,勿喷)
// 性别:常规定义
const gender = {
male: 'male', // 男
female: 'female' // 女
}
// 性别:Symbol定义
const gender = {
male: Symbol(),
female: Symbol()
}
person
对象,我想扩展一个方法,但又不确定新加的方法名是否会引起冲突,所以使用Symbol类型的值做为方法名// person对象
let person = {
name: 'yusian',
age: 21,
say() {
console.log('saying...');
}
}
// 自定义方法名
let methods = {
say: Symbol('say'),
run: Symbol('run')
}
person[methods.say] = function () {
console.log('symbol saying...');
}
person[methods.run] = function () {
console.log('symbol running...');
}
person.say(); // saying...
person[methods.say](); // symbol saying...
person[methods.run](); // symbol running...
Symbol.hasInstance
为例,定义一个Person
类,在类中定义一个静态方法名为Symbol.hasInstance
,那么当对该类进行instanceof
调用时就会执行该静态方法,返回值即为调用返回结果。class Person {
// 方法名一般为字符串,Symbol类型做为方法名需要加方括号
static [Symbol.hasInstance] = function (foo) {
console.log('hasInstance, ', foo);
return false;
}
}
let p = new Person();
console.log(p instanceof Person); // false
参考链接:阮一峰ES6入门
[……]
XMLHttpRequest是WebAPI中的标准对象,可发起Ajax请求。三步曲:
* 创建XMLHttpRequest对象;
* open方法设置请求方式及url地址;
* send方法正式发起请求;
<script>
let xhr =[......]
简单一点讲,原子组就是正则表达式中的小括号()及所包括的内容
let date = '今天是2020-09/29';
// 日期分隔符有/或-,如是分开写,会匹配出前后不一致的数据,比如2020-09/29
let reg = /\d{4}[\/\-]\d{2}[[......]
(?=exp)
(?!exp)
(?<=exp)
(?<!exp)