const a = [1, 2, 3]
a.forEach(function (v, i, arr) { // v = 현재값 i = 인덱스 값 arr = 원래 배열값
	console.log(v,i,arr,this);
},[10,11,12])
=================================
1 0 [1,2,3] [10,11,12]
2 1 [1,2,3] [10,11,12]
3 2 [1,2,3] [10,11,12]
const a = [1, 2, 3]
const b =   a.map(function (v, i, arr) { // v = 현재값 i = 인덱스 값 arr = 원래 배열값
						return this[0] + v;	 // this[0]는 즉 10이기때문에 순차적으로 돌려 새로운 배열
},[10])
====================================
[11,12,13]
const arr = [1, 2, 3]
const res= a.reduce(function (p, c, i) { // p = 누적된값 c = 현재값 i = 인덱스값
					console.log(p,c,i);
					return p+c;
},10)
=====================
16
var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

/**
 * 검색 조건에 따른 배열 필터링(쿼리)
 */
function filterItems(query) {
  return fruits.filter(function(el) {
      return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
  })
}

console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']

<aside> 💡 map과 fitter 차이점 map은 모든 요소를 새로운 배열로 반환 fitter는 조건에 충족하는 애들을 새로운 배열 형태로 나옴

</aside>

let arr = [1, 1, 2, 3, 4];
let uniqueSet = new Set(arr);
let uniqueArr = [...new Set(arr)]; // ... : 스프레드 연산자
console.log(uniqueArr);

//result :
//Set(4) { 1, 2, 3, 4 }
//[1, 2, 3, 4]
var arr = ['apple','banana', 'kwie','blueberry'];
var result = arr.includes("kwie");
console.log(result); // true