map


/**
	* @param {function=} f
	* @param {iterable=} iter
	*/
const map = (f, iter) =>{
	let res = [];
	for (const i of iter){
		res.push(f(i));
	}
	return res;
}

이터러블 프로토콜을 따른 map의 다형성


❓querySelectorAll은 map이 동작할까?

document.querySlectorAll("*").map(...); //error function is not defined (map)

❗하지만, iterable protocol을 따르기 때문에 순회로직 사용가능.

const map = (f, iter) =>{
	let res = [];
	for (const i of iter){
		res.push(f(i));
	}
	return res;
}

console.log(map(el=>el.nodeName, document.querySelectorAll('*')));
//["HTML", "HEAD", "SCRIPT", "SCRIPT", "BODY"...]

function *gen(){
	yield 2;
	yield 3;
	yield 4;
}
console.loglog(map(a=>a*a, gen()); // 4, 9, 16