Iterator和Generator都是Python中用于处理迭代的高级语言特性。
includes
方法是 ECMAScript 2016 引入的一种新方法,用于检查一个数组是否包含某个值,并返回一个布尔值。如果数组中包含这个值则返回 true
,否则返回 false
。includes
方法可以用在数组、字符串和 TypedArray 中。
const arr = [1, 2, 3, 4, 5];
console.log(arr.includes(3)); // 输出 true
console.log(arr.includes(6)); // 输出 false
Iterator中有for....of方法可以用在数组、Set、Map中。
//数组for····of
let arr=[10,20,30]
for(let v of arr){
console.log(v);
}
//数组for····of
let s=new Set();
s.add(10).add(100).add(900);
for(let v of s){
console.log(v);
}
//Map使用for····of
let m=new Map();
m.set('k1',100)
m.set('k3',200)
m.set('k2',300)
m.set('k4',400)
for(let [k,v] of m){
// console.log(v[0]);
// console.log(v[1]);
console.log(k,v);
}
但是 在对象中for....of方法无法使用:
let obj={
id:110,
name:"网三",
age:2
}
for(let v of obj){
console.log(v);//错误: Uncaught TypeError: obj is not iterable at
}
这就要了解一下iterator的执行原理:
function makeIterator(arr) {
var nextIndex = 0;//标记索引
return {
next: function () {
return nextIndex < arr.length ?
{ value: arr[nextIndex++], done: false } :
{ value: undefined, done: true };
}
};
}
var it = makeIterator(['a', 'b']);
it.next() // { value: "a", done: false }
it.next() // { value: "b", done: false }
it.next() // { value: undefined, done: true }
并不是iterator无法去使用对象而是需要创作者自我创建,设置后才能使用for....of进行遍历:
function Person(no, name, age) {
this.no = no;
this.name = name;
this.age = age;
}
//部署接口
Person.prototype[Symbol.iterator] = function () {
let keys = Object.keys(this);//所有属性的集合
let nextIndex = 0;
return {
next: () => {
return nextIndex < keys.length ?
// { value: this[keys[nextIndex++]], done: false } :
{ value: [keys[nextIndex], this[keys[nextIndex++]]], done: false } :
{ value: undefined, done: true }
}
}
}
let p = new Person('10001', '光头强', 18);
for (let v of p) {
console.log(v);
}
Generator方法是Python中的一种特殊函数,它可以通过yield关键字来实现可迭代对象的创建。与普通函数不同的是,Generator方法中包含yield语句,通过执行yield语句来产生一个值,并且保存当前执行状态,等待下一次调用时继续执行。
Generator方法非常适合处理大型数据集合,因为它可以在需要时按需生成数据,从而减少内存的使用。另外,由于Generator方法可以产生无限的结果序列,因此在处理无限序列时很有用。
function * fn(){
yield "hello"
console.log(1111);
yield "world"
yield "hi"
};
let it=fn();
// console.log(it);//遍历器对象
let rst1=it.next();
console.log(rst1);
let rst2=it.next();
console.log(rst2);