27配列方法
72522 ワード
配列方法
->元のアレイを直接変更しない方法
メソッド
const arr = [1];
// push 메서드는 원본 배열(arr) 직접 변경
arr.push(2);
console.log(arr); // [1, 2]
// concat 메서드는 원본 배열을 직접 변경하지 않고 새로운 배열을 생성하여 반환
const result = arr.concat(3);
console.log(arr); // [1, 2]
console.log(result); // [1, 2, 3]
Array.isArray
伝達パラメータが配列
// true
Array.isArray([]);
Array.isArray([1, 2]);
Array.isArray(new Array());
// false
Array.isArray();
Array.isArray({});
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray(1);
Array.isArray(undefined);
Array.isArray(null);
Array.isArray({0: 1, length: 1});
Array.prrototype.indexof
const arr = [1, 2, 3, 4];
arr.indexOf(2); // 1
arr.indexOf(4); // -1
// 두 번째 인수는 검색을 시작할 인덱스 -> 두 번째 인수를 생략하면 처음부터 검색
arr.indexOf(2, 2); //2
// ex2)
const foods = ['apple', 'banana', 'orange'];
if (foods.indexOf('orange') === -1){
// ES6 if(!foods.includes('orange'))
// 요소가 없으면 추가
foods.push('orange');
}
console.log(foods); // ['apple', 'banana', 'orange'];
Array.prototype.push
const arr = [1, 2];
// push 메서드는 원본 배열(arr) 직접 변경
// 변경된 length 값을 반환
let result = arr.push(3, 4);
console.log(result); // 4
console.log(arr); // [1, 2, 3, 4]
// 원본 배열을 직접 변경하는 부수효과 방지 -> 스프레드 문법사용
const arr = [1, 2];
const newArr = [...arr, 3];
console.log(newArr); // [1, 2, 3]
Array.prototype.pop
直接変更
const arr = [1, 2];
// pop 메서드는 원본 배열(arr) 직접 변경
// 변경된 length 값을 반환
let result = arr.pop();
console.log(result); // 2
console.log(arr); // [1]
// 원본 배열을 직접 변경하는 부수효과 방지 -> 스프레드 문법사용
const arr = [1, 2];
const newArr = [...arr, 3];
console.log(newArr); // [1, 2, 3]
const Stack = (function () {
function Stack(array = []) {
if(!Array.isArray(array)) {
throw new TypeError(`${array} is not an array.`);
}
this.array = array;
}
Stack.prototype = {
constructor: Stack,
// 스택의 가장 마지막 데이터를 밀어 넣음
push(value) {
return this.array.push(value);
},
// 스택의 가장 마지막 데이터, 가장 최신에 넣은 데이터를 꺼냄
pop() {
return this.array.pop();
},
// 스택의 복사본 배열을 반환
entries() {
return [...this.array];
}
};
return Stack;
}());
const stack = new Stack([1, 2]);
console.log(stack.entries()); // [1,2]
stack.push(3);
console.log(stack.entries()); // [1,2,3]
stack.pop();
console.log(stack.entries()); // [1,2]
Array.portotype.unshift
ソースアレイ
const arr = [1, 2];
// 인수로 전달받은 모든 값을 원본 배열의 선도에 요소로 추가
let result = arr.unshift(3, 4);
console.log(result); // 4
console.log(arr); // [3, 4, 1, 2] -> 원본 배열 직접 변경
// 부수효과가 없는 스프레드 문법사용
cosnt arr = [1, 2];
const newArr = [3, ...arr];
console.log(arr); // [3, 1, 2]
Array.portotype.shift
ソースアレイ
const arr = [1, 2];
// 첫 번째 요소를 제거하고 제거한 요소 반환
let result = arr.shift();
console.log(result); // 1
console.log(arr); // [2] -> 원본 배열 직접 변경
const Queue = (function () {
function Queue(array = []) {
if (!Array.isArray(array)){
throw new TypeError(`${array} is not an array`);
}
this.array = array;
}
Queue.prototpye = {
constructor: Queue,
// 큐의 가장 마지막에 데이터를 밀어 넣음
enqueue(value) {
return this.array.push(value);
},
// 큐의 가장 처음 데이터, 가장 먼저 밀어 넣은 데이터를 꺼냄
dequeue() {
return this.array.shift();
},
// 큐의 복사본 배열을 반환
entries(){
return [...this.array];
}
};
return Queue;
}());
const queue = new Queue([1, 2]);
console.log(queue.entries()); // [1, 2]
queue.enqeue(3);
console.log(queue.entries()); // [1, 2, 3]
queue.dequeue();
console.log(queue.entries()); // [2, 3]
Array.prototype.concat
const arr1 = [1, 2];
const arr2 = [3, 4];
let result = arr1.concat(arr2);
console.log(result); // [1, 2, 3, 4]
// 원본 배열 arr1의 마지막 요소로 추가한 새로운 배열을 반환
result = arr1.concat(3);
console.log(result); // [1, 2, 3]
result = arr1.concat(arr2, 5);
console.log(result); // [1, 2, 3, 4, 5]
// 원본 배열은 변경되지 않음
console.log(arr1); // [1, 2]
const arr = [3, 4]
arr.unshift([1, 2]);
arr.push([5, 6]);
console.log(arr); // [[1, 2], 3, 4, [5, 6]]
let result = [1, 2].concat([3, 4]);
result = result.concat([5, 6]);
console.log(result); //[1, 2, 3, 4, 5, 6]
// ES6 스프레드 문법
let result = [1, 2].concat([3, 4]);
console.log(result); // [1, 2, 3, 4]
result = [...[1, 2], ...[3, 4]);
console.log(result); // [1, 2, 3, 4]
Array.prototype.splice
const arr = [1, 2, 3, 4];
const result = arr.splice(1, 2, 20, 30);
// 제거한 요소가 배열로 반환
console.log(result); // [2, 3]
// splice 메서드는 원본 배열을 직접 변경
console.log(arr); // [1, 20, 30, 4]
const arr = [1, 2, 3, 1, 2];
const remove = (array, item) => {
const index = array.indexOf(item);
if(index !== -1) array.splice(index, 1);
return array;
}
console.log(remove(arr, 2)); // [1, 3, 1, 2]
console.log(remove(arr, 10)); // [1, 3, 1, 2];
// filter
const removeAll(array, item) => {
return array.filter(v => v!= item);
}
console.log(removeAll(arr, 2)); // [1, 3, 1]
Array.prototype.slice
パラメータコンテンツstartがコピーしたインデックスが負の値の場合、配列の末尾のインデックスを表します.slice(-2)は最後の2つの要素をコピーし、戻り先をアレイにコピーするインデックスを省略する場合、デフォルト値はlength property値です.
const arr = [1, 2, 3];
// arr[0]부터 arr[1] 이전까지 복사하여 반환
arr.slice(0, 1); // [1]
arr.slice(1, 2); // [2]
// 원본은 변경되지 않음
console.log(arr); // [1, 2, 3]
// 두번 째 인수를 생략하면 첫 번째 인수로 전달받은 인덱스로 부터 모든 요소를 복사
arr.slice(1) // [2, 3]
// 음수인 경우 배열의 끝에서 부터 요소를 복사
arr.slice(-1); // [3]
// 배열의 끝에서 두 개를 복사하여 반환
arr.slice(-2); // [2, 3]
// 인수를 모두 생략하면 원본 배열의 복사본을 생성 (얕은 복사)
const copy = arr.slice();
console.log(copy); // [1, 2, 3]
console.log(copy === arr); // false
// ex
const todos = [{id: 1, content: 'HTML'}, {id: 2, content:'CSS'}];
// 얕은 복사
const _todos = todos.slice();
// es6 const _todos = [...todos];
// todos와 _todos는 참조값이 다른 별개의 객체
console.log(todos === _todos); // false
// 배열의 참조값이 같다 => 앝은 복사
console.log(todos[0] === _todos[0]); // true
todos[0].id = 5;
console.log(_todos); // [{id: 5, content: 'HTML'}, {id: 2, content: 'CSS'}]
function sum() {
var arr = Array.prototype.slice.call(arguments);
console.log(arr); // [1, 2, 3]
return arr.reduce((pre, cur) => pre + cur), 0);
}
console.log(sum(1, 2, 3)); // 6
function sum() {
// 유사 배열 객체를 배열로 변환
// ES6 const arr = [...arguments];
const arr = Array.from(arguments);
console.log(arr); // [1, 2, 3]
return arr.reduce((pre, cur) => pre + cur), 0);
}
console.log(sum(1, 2, 3)); // 6
Array.prototype.join
const arr = [1, 2, 3, 4];
arr.join(); // 1, 2, 3, 4
arr.join(''); // 1234
arr.join(':'); // 1:2:3:4
Array.prototype.reverse
逆順序
const arr = [1, 2, 3];
const result = arr.reverse();
// 원본 배열을 직접 변경
console.log(arr); // [3, 2, 1]
console.log(result); // [3, 2, 1]
Array.prototype.fill
ソースアレイ
const arr = [1, 2, 3];
arr.fill(0);
console.log(arr); // [0, 0, 0]
const arr2 = [1, 2, 3];
arr.fill(0, 1); // 두 번째 요소는 시작할 인덱스
console.log(arr2); // [1, 0, 0]
const arr3 = [1, 2, 3, 4, 5]
arr.fill(0, 1, 3); // 세 번째 요소는 멈출 인덱스 (인덱스 3 미포함)
console.log(arr3); // [1, 0, 0, 4, 5]
const sequences = (length = 0) => Array.from({ length }, (_, i) => i);
console.log(sequences(3)); // [0, 1, 2]
Array.prototype.includes
const arr = [1, 2, 3];
arr.includes(2); // true
arr.includes(10); // false
// 두 번째 인수는 검색을 시작할 index값
arr.includes(1, 1); // false
// 음수 인경우 (arr.length -1)부터 확인
arr.includes(3, -1); // true
[NaN].indexOf(NaN) !== -1; // false
[NaN].includes(NaN); // true
Array.prototype.flat
[1, [2, 3, 4, 5]].flat(); // [1, 2, 3, 4, 5]
// 중첩 배열을 평탄화할 깊이를 인수로 전달 기본값(1)
[1, [2, [3, [4]]]].flat(); // [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(1); // [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(2); // [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat().flat(); // [1, 2, [3, [4]]]
// Infinity를 통해 중첩 배열 모두 평탄화
[1, [2, [3, [4]]]].flat(Infinity); // [1, 2, 3, 4, 5]
📖 参考図書:モダンJavaScript Deep Dive JavaScriptの基本概念と動作原理Reference
この問題について(27配列方法), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_jazziron/2702テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol