面试题答案
一键面试1. 自定义可迭代对象
在JavaScript中,要使一个对象成为可迭代对象,需要为该对象实现[Symbol.iterator]
方法。该方法返回一个迭代器对象,迭代器对象必须包含next()
方法,每次调用next()
方法返回一个包含value
和done
属性的对象。value
是当前迭代的值,done
是一个布尔值,表示迭代是否结束。
以下是一个简单的自定义可迭代对象的示例:
const myIterable = {
data: [1, 2, 3, 4, 5],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
} else {
return { done: true };
}
}
};
}
};
2. 在数组数据处理中遍历和筛选操作
遍历操作
可以使用for...of
循环来遍历自定义的可迭代对象:
for (const value of myIterable) {
console.log(value);
}
上述代码会依次打印出1
, 2
, 3
, 4
, 5
。
筛选操作
结合filter
方法,可以对可迭代对象的数据进行筛选。由于filter
方法接受一个数组或类数组对象作为参数,我们可以将自定义可迭代对象转换为数组(通过Array.from
),然后进行筛选:
const filteredArray = Array.from(myIterable).filter(value => value % 2 === 0);
console.log(filteredArray);
上述代码会筛选出myIterable
中的偶数,打印出[2, 4]
。
也可以自定义一个筛选函数,直接对可迭代对象进行筛选,而不转换为数组:
function* filterIterable(iterable, callback) {
for (const value of iterable) {
if (callback(value)) {
yield value;
}
}
}
const filteredIterable = filterIterable(myIterable, value => value % 2 === 0);
for (const value of filteredIterable) {
console.log(value);
}
上述代码同样会打印出2
和4
,这里使用了生成器函数filterIterable
来实现对可迭代对象的筛选,yield
关键字用于返回符合条件的值。