underscore.js 구현

slice

_.slice = function(arr, start, end) { // start가 undefined인 경우, 0부터 시작 let _start = start || 0; let _end = end; // 인덱스가 음수인 경우 if (start < 0) _start = Math.max(0, arr.length + start); if (end < 0) _end = Math.max(0, arr.length + end); // end가 undefined이거나 배열의 범위를 벗어날 경우, 마지막 인덱스까지 동작 if (_end = undefined || _end > arr.length) _end = arr.length; let result = []; for (let i = _start; i < _end; i++) { result.push(arr[i]); } return result; }
JavaScript
복사

first

// _.first는 배열의 처음 n개의 element를 담은 새로운 배열을 리턴합니다. // n이 undefined이거나 음수인 경우, 빈 배열을 리턴합니다. // n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴합니다. _.first = function(arr, n) { let _n = n; if (_n === undefined || _n < 0) _n = 0; return _.slice(arr, 0, _n); }
JavaScript
복사

last

_.last = function(arr, n) { let _n = n; if (_n === undefined || _n < 0) _n = 1 return _.slice(arr, arr.length - _n); }
JavaScript
복사