2021_03_23
25428 ワード
TIL-ダイレクトインプリメンテーションライブラリ
1.直接実施ライブラリ
今日は下線ですjsライブラリの一部を直接実装する時間があります.
underscore.jsは、基本的なJavaScriptオブジェクトを拡張することなく、100以上の関数をサポートできる有用なJavaScriptライブラリです.
では、今日直接実施したライブラリをご紹介します.
1) ._take
配列の先頭のn要素を含む新しい配列を返します.
前のn要素を除く新しい配列を返します.
配列の最後のn要素を含む新しい配列を返します.
コレクション内の各データに対して重複した操作を実行します.
test関数を通過するすべての要素を含む新しい配列を返します.
test関数を通過しないすべての要素を含む新しい配列を返します.
指定した配列の要素が重複しないように、新しい配列を返します.
反復(繰返しタスク)を配列内の各要素に適用した結果を含む新しい配列を返します.
オブジェクトまたは配列を要素とする配列と、各要素で検索するキーまたはインデックスを入力し、各要素の対応する値または要素のみを抽出し、新しい配列に保存して返します.
配列を巡回し、各要素に反復関数を適用し、結果値を蓄積し続け、結果値を返します.
今日はここまで:)
1.直接実施ライブラリ
今日は下線ですjsライブラリの一部を直接実装する時間があります.
underscore.jsは、基本的なJavaScriptオブジェクトを拡張することなく、100以上の関数をサポートできる有用なJavaScriptライブラリです.
では、今日直接実施したライブラリをご紹介します.
1) ._take
配列の先頭のn要素を含む新しい配列を返します.
_.take = function (arr, n) {
if(n === undefined || n <= 0) { // n이 undefined이거나 음수인 경우, 빈 배열 리턴
return [];
}
if(arr.length < n) { // n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴
return arr;
}
let result = [];
for(let i = 0; i < n; i++) { //arr의 1부터 n개의 element를 담는다.
result.push(arr[i]);
}
return result;
};
2) ._drop前のn要素を除く新しい配列を返します.
_.drop = function (arr, n) {
if(n === undefined || n <= 0) { // n이 undefined이거나 음수인 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴
return arr;
}
if(arr.length < n) { // n이 배열의 길이를 벗어날 경우, 빈 배열을 리턴
return [];
}
let result = [];
for(let i = n; i < arr.length; i++) { //arr의 n부터 element를 담는다.
result.push(arr[i]);
}
return result;
};
3) ._last配列の最後のn要素を含む新しい配列を返します.
_.last = function (arr, n) {
if(n === undefined || n < 0) { // n이 undefined이거나 음수인 경우, 배열의 마지막 요소만을 담은 배열을 리턴
return [arr[arr.length-1]];
}
else if(arr.length < n) { // n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴
return arr;
}
else if(n === 0) {
return [];
}
let result = [];
for(let i = arr.length-n; i < arr.length; i++) { //arr.length-n 인덱스부터 새로운 배열에 추가
result.push(arr[i]);
}
return result;
};
4)._eachコレクション内の各データに対して重複した操作を実行します.
_.each = function (collection, iteratee) { //collection(배열 혹은 객체)과 함수 iteratee(반복되는 작업)를 인자로 받는다.
if(Array.isArray(collection)) {
for(let i = 0; i < collection.length; i++) { //collection의 데이터를 순회하면서
iteratee(collection[i],i,collection); // iteratee에 각 데이터를 인자로 전달하여 실행한다.
}
}
else {
for(let key in collection) {
iteratee(collection[key], key, collection);
}
}
};
5)._filtertest関数を通過するすべての要素を含む新しい配列を返します.
_.filter = function (arr, test) {
let result = [];
_.each(arr, function (el) { //각 요소에 반복 적용한다.
if (test(el)) { //test(element)의 결과(return 값)가 true라면
result.push(el); //새로운 배열에 추가한다.
}
});
return result;
};
6)._rejecttest関数を通過しないすべての要素を含む新しい配列を返します.
_.reject = function (arr, test) {
let result = [];
_.each(arr, function (el) { //각 요소에 반복 적용한다.
if(!test(el)) { //test(element)의 결과(return 값)가 false라면
result.push(el); //새로운 배열에 추가한다.
}
});
return result;
};
7)._uniq指定した配列の要素が重複しないように、新しい配列を返します.
_.uniq = function (arr) {
let result = [];
_.each(arr, function(el) { //각 요소에 반복 적용한다.
for(let i = 0; i < arr.length; i++) {
if(result[i] === el) { //중복되는 요소가 발견되면
return ; //배열에 추가하지않고 return 한다.
}
}
result.push(el); //중복되는 요소가 발견되지 않으면 배열에 요소를 추가한다.
})
return result;
};
8)._map反復(繰返しタスク)を配列内の各要素に適用した結果を含む新しい配列を返します.
_.map = function (arr, iteratee) {
let newArr = [];
_.each(arr, function(el) { //각 요소에 반복 적용한다.
newArr.push(iteratee(el)); //iteratee를 적용한 결과를 배열에 추가한다.
})
return newArr;
};
9)._pluckオブジェクトまたは配列を要素とする配列と、各要素で検索するキーまたはインデックスを入力し、各要素の対応する値または要素のみを抽出し、新しい配列に保存して返します.
_.pluck = function (arr, keyOrIdx) {
let result = [];
_.map(arr, function(el) { //각 요소에 반복 적용한다.
result.push(el[keyOrIdx]); //각 요소의 해당 값(요소)를 배열에 추가한다.
})
return result;
};
10)._reduce配列を巡回し、各要素に反復関数を適用し、結果値を蓄積し続け、結果値を返します.
_.reduce = function (arr, iteratee, initVal) {
let acc = initVal;
_.each(arr, function (ele, idx, arr) { //각 요소에 반복 적용한다.
if(acc === undefined) { //초기값이 주어지지 않았다면 배열의 첫번째 요소 할당
acc = arr[0];
}
else{
acc = iteratee(acc, ele, idx, arr); //각 요소를 iteratee 함수에 적용하고 그 결과값을 계속해서 누적한다.
}
});
return acc;
};
今日、ライブラリを直接実装することで、JavaScriptの基本的な文法をマスターすることができます.明日ももっと勉強しましょう.今日はここまで:)
Reference
この問題について(2021_03_23), 我々は、より多くの情報をここで見つけました https://velog.io/@jiwon22/20210323テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol