concat()메서드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환한다.
사용방법
const array1 = ['a','b','c'];
const array2 = ['d','e','f'];
const array3 = array1.concat(array2);
console.log(array3)
//결과 : ['a', 'b', 'c', 'd', 'e', 'f']
배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다.
push
,pop
,unshift
,shift
역할을 다 할 수 있다고 보면 된다.
기존 배열의 값을 변경한다.
위 함수들은 직접 값을 변경하기 때문에 실무에서는 다른거를 사용
array.splice(startIndex[, deleteCount[, item1,[item2], ...]]
let mine = [0, 1, 2, 3];
//배열 2번째 위치한 곳에 숫자 5를 추가한다.
mine.splice(2,0,5); //[0, 1, 5, 2, 3]
//배열 2번째 위치한 곳에 숫자 5, 7을 추가한다.
mine.splice(2,0,5,7); //[0, 1, 5, 7, 2, 3]
let mine = [0, 1, 2, 3];
//배열 1번째 부터 1개를 제거한다.
mine.splice(1,1); //[0, 2, 3]
//배열 1번째 부터 2개를 제거한다.
mine.splice(1, 2); //[0, 3]
let mine = [0, 1, 2, 3];
//배열 1번째 부터 1개를 제거하고 숫자 5개를 추가한다.
mine.splice(1, 1, 5); //[0, 5, 2, 3]
//배열 1번째 부터 2개를 제거하고 숫자 5로 추가한다.
mine.splice(1, 2, 5); //[0, 5, 3]
let mine = [0, 1, 2, 3];
//배열 1번째 부터 1개를 제거한다.
let remove = mine.splice(1,1); //[1]
//배열 1번째 부터 2개를 제거한다.
let remove = mine.splice(1,2); //[1,2]
https://mine-it-record.tistory.com/352
for문 돌리는거랑 같은 개념
Array.prototype.forEach(callback[, thisArg])
callback
: function(currentValue[, index[, originalArray]])
currentValue
: 현재값index
: 현재 인덱스originalArray
: 원본배열thisArg
: this에 할당할 대상. 생략시 global객체
const a = [1, 2, 3];
a.forEach(
function (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]
*/
forEach()함수를 사용할 때 콜백함수로 일반 함수를 선언하는 것과 ES6에 추가된 화살표 함수를 사용하는 것에는 큰 차이점이 있다.
const fun1 = {
name: "pyh",
languages: ["java", "c++", "javascript"],
languagesPrint: function () {
console.log(this.name);
this.languages.forEach(function (language) {
console.log(language);
console.log(this);
});
},
};
fun1.languagesPrint();
/*
pyh
java
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
c++
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
javascript
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
*/
위의 코드에서 languagesPrint()의 this는 현재 객체인 fun1을 가리키지만, forEach의 인자로 들어간 콜백함수는 그렇지 않기 때문에 window객체가 나오게 된다. 이런 현상을 해결 할 수 있는 방법은 다음과 같다.
//arrow function -> forEach 내부 함수값에 있는 this고정.
const fun1 = {
name: "pyh",
languages: ["java", "c++", "javascript"],
languagesPrint: function () {
console.log(this.name);
this.languages.forEach((language) => {
console.log(this.name, language);
});
},
};
fun1.languagesPrint();
/*
pyh
pyh java
pyh c++
pyh javascript
*/
다음과 같이 콜백함수를 arrow function으로 선언해주면, forEach()를 호출하는 this와 콜백함수 내의 this는 같게 되므로, 객체 변수를 참조할 수 있게 된다.
this바인딩
- 전역공간에서 : window / global
- 함수 호출시 : window /global
- 메서드 호출시 : 메서드 호출 주체(메서드명 앞)
- callback 호출시 : 기본적으로는 함수내부에서와 동일
- 생성자함수 호출시 : 인스턴스
for문을 돌려서 새로운 배열을 만든다.
return필수
Array.prototype.map(callback[, thisArg])
callback
: function (currentValue[, index[, originalArray]])
currentValue
: 현재값index
: 현재 인덱스originalArray
: 원본 배열thisArg
: this에 할당할 대상. 생략시 global객체,window객체const a = [1, 2, 3];
const b = a.map(
function (v, i, arr) {
console.log(v, i, arr, this);
return this[0] + v;
},
[10]
);
/*
1 0 [1, 2, 3] [10]
2 1 [1, 2, 3] [10]
3 2 [1, 2, 3] [10]
*/
console.log(b); // [11,12,13]
※ map함수로 생성된 배열은 기존 배열이 아닌 새로운 배열이다.
const a = [1, 2, 3];
const b = a.map((v) => {
return v;
});
console.log(a === b); //false
filter()
메서드는 주어진 함수의 테스트를 통과하여 모든 요소를 모아 새로운 배열로 반환한다.
arr.filter(callback(element[, index[, array]])[, thisArg])
callback
true
를 반환하면 요소를 유지하고,false
를 반환하면 버린다. 다음 세 가지 매개변수를 받는다. 처리할 현재 요소.filter
를 호출한 배열.thisArg(Optional)
callback을 실행할 때 this
로 사용하는 값.테스트를 통과한 요소로 이루어진 새로운 배열. 어떤 요소도 테스트를 통과하지 못했으면 빈 배열을 반환한다.
길이가 6이상인 단어 필터링
const words = [
"spray",
"limit",
"elite",
"exuberant",
"destruction",
"present",
];
const result = words.filter((word) => word.length > 6);
console.log(result); // ['exuberant', 'destruction', 'present']
배열 요소에서 5의 배수인 요소만 반환
const arr = [1, 5, 8, 10, 12, 15, 16, 20];
var newArr = arr.filter((data) => {
return data % 5 === 0 ? true : false;
});
console.log(newArr); //[5,10,15,20]
참고 : https://developer-talk.tistory.com/2
const movies = ["avengers", "Thor", "spiderman", "Ironman", "antman"];
const filterMovie = (query) => {
return movies.filter((value) => {
return value.toLowerCase().indexOf(query.toLowerCase()) > -1;
});
};
console.log(filterMovie("man"));
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
for문을 돌려서 최종적으로 다른 무언가를 만드는 목적. return필수
Array.prototype.reduce(callback[, initialValue])
initialValue
: 초기값. 생략시 첫번째 인자가 자동 지정되며, 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생한다.callback
: function (accumulator, currentValue[, currentIndex[, originalArray]])
accumulator
: 누산기는 콜백의 반환값을 누적한다. 콜백의 이전 반환값 또는, 콜백의 첫번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값이다.currentValue
: 현재값.currentIndex
: 현재 인덱스, initialValue를 제공한 경우 0, 아니면 1부터 시작.originalArray
: reduce() 를 호출한 배열.const arr = [1, 2, 3];
const res = arr.reduce(function (p, c, i, arr) {
console.log(p, c, i, arr, this);
return p + c;
}, 10);
/*
10 1 0 [1, 2, 3] window
11 2 1 [1, 2, 3] window
13 3 2 [1, 2, 3] window
console.log(res) //16
*/
const arr = ["a", "b", "c", "d"];
const str = arr.reduce(function (res, item, index, array) {
res[item] = item;
return res;
}, {});
console.log(str); //{a: 'a', b: 'b', c: 'c', d: 'd'}
const arr = [1, 2, 3, 4];
const str = arr.reduce(function (res, item, index, array) {
return res + item;
}, ""); //''생략이 1이 출력.
console.log(str); //1234
const arr = ["a", "b", "c", "d"];
const str = arr.reduce(function (res, item, index, array) {
return res + item;
});
console.log(str); //abcd
const arr = [10, 20, 30, 40, 50];
const r = arr.reduce(function (p, c) {
return p + c;
});
console.log(r); //150
return 생략
const arr = [10, 20, 30, 40, 50];
const r = arr.reduce((p, c) => p + c);
console.log(r); //150
for문으로 돌릴 경우
const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let res = 0;
for (let b = 0; b < a.length; b++) {
res += a[b];
}
//55
reduce문으로 돌릴 경우
const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const res = a.reduce(function (a, c) {
return a + c;
});
console.log(res); //55