配列と集合
43633 ワード
アレイの作成
未定義の1万要素の配列に初期化します.
const bigEmptyArray = []
bigEmptyArray.length = 10000
類似の配置オブジェクトから配置要素を収集します.類似配列-likeオブジェクトとは、長さが整数のプロパティ、または「0」、「1」、「2」を指します.等連続名を持つpropertyと同じオブジェクト.const arrayLike = { length: 3 , '0': 'Peter', '1': 'Paul', '2': 'Mary'}
const elements = Array.from(arrayLike)
elements // ['Peter', 'Paul', 'Mary']
Array.isArray(arrayLike) // false
Array.isArray(elements) // true
Array.fromメソッドの2番目のパラメータを0からlength-1までのインデックス値を返す関数として受信すると、要素とインデックスが渡されます.const square = Array.from({length: 5}, (element, index) => index * index )
square // [0, 1, 4, 9, 16]
長さと索引の割合
配列の長さは0~2^32-1の数値です.配列はlength propertyとinformix property「1」、「2」、「3」...所有するオブジェクト.propertyキーは常に文字列です.
要素の削除と追加
配列の最後に要素を追加したり、最後の要素を削除したりする方法では、配列の長さも変更されます.
let arr = [0, 1, 4, 9, 16, 25]
const deletedElement = arr.pop()
const newLength = arr.push('x')
arr // [0, 1, 4, 9, 16, 'x']
deletedElement // 25
newLength // 6
配列の前に要素を追加したり、最初の要素を削除したりする方法では、配列の長さも変更されます.arr = [0, 1, 4, 9, 16, 25]
const deletedElement = arr.shift()
const newLength = arr.unshift('x')
arr // ['x', 1, 4, 9, 16, 25]
deletedElement // 0
newLength // 6
arr.push(15,25)
arr // ['x', 1, 4, 9, 16, 25, 15, 25]
arr.unshift(0,1,4)
arr // [0, 1, 4, 'x', 1, 4, 9, 16, 25, 15, 25]
spliceはarr.splice(start,deleteCount,x 1,x 2,...)arr = [0, 1, 12, 24, 36]
const start = 2
arr.splice(start, 2, 16, 25) // [12, 24]
arr // [0, 1, 16, 25, 36]
arr.splice(start, 0, 4, 9) // []
arr // [0, 1, 4, 9, 16, 25, 36]
arr.splice(start, 2) // [4, 9]
arr // (5) [0, 1, 16, 25, 36]
arr.splice(start) // [16, 25, 36]
arr // [0, 1]
配列変更者mutator
arr.fill(value,start,end)-既存の要素を新しい要素で上書きします.
Arr.copyWithin(targetIndex,start,end)-既存の要素を同じ配列の他の要素で上書きします.
let arr = [0, 1, 4, 9, 16, 25]
arr.copyWithin(0, 1) // [1, 4, 9, 16, 25, 25]
arr.copyWithin(1) // [1, 1, 4, 9, 16, 25]
arr.fill(7, 3, -1) // [1, 1, 4, 7, 7, 25]
arr.reverse() // [25, 7, 7, 4, 1, 1]
arr.sort(comparisonFunction)比較機能(x,y)-負数xをyより前、正の値xをyより後と区別できない
arr = [0, 1, 13, 33, 4, 8]
arr.sort((x,y) => x-y) // [0, 1, 4, 8, 13, 33]
arr.sort() // [0, 1, 13, 33, 4, 8]
比較関数が指定されていない場合、sort関数は要素を文字列に変換して比較します.要素の作成
ここで説明する方法は、既存の配列の内容を変更するのではなく、既存の配列に何らかの演算を適用した結果を新しい配列として作成します.
arr1 = [0, 1, 13, 33, 4, 8]
arr1.slice(1, 2) // [1]
arr1 // [0, 1, 13, 33, 4, 8]
arr2 = [[1, 2], [3, 4]]
arr2.flat() // [1, 2, 3, 4]
arr1.concat(9,8, arr2) // [0, 1, 13, 33, 4, 8, 9, 8, Array(2), Array(2)]
// = [...arr1, 9, 8, ...arr2]
要素の検索
配列に特定の値があることを確認
arr.include(target, start) // 참, 거짓
arr.indexOf(target, start) // 첫인덱스 , -1
arr.lastIndexOf(target, start) // 마지막인덱스, -1
arr.findIndex(conditionFunction) // 조건에 맞는 첫번째 인덱스
arr.find(conditionFunction) // 조건에 맞는 첫번째 요소
arr3 = [0, 1, 13, 33, 4, 8, 9, 8]
arr3.find(x => x > 20) // 33
arr3.some(x => x > 20) // true
arr3.every(x => x > 20) // false
次の方法の条件関数では、配列要素、インデックス、および配列全体を条件関数の係数として受け入れます.arr.find
arr.every
arr.some
arr.filter
すべての要素にアクセス
forループは0とlength-1の間のすべてのインデックス値にアクセスし、欠落した要素は未定義を返します.逆に、for inループは存在するキー値のみにアクセスします.
for (const e of arr) {
// 요소 e로 작업수행
}
for (const i in arr) {
// 인덱스 i 와 요소 arr[i] 로 작업수행
}
for ( const [index, element] of arr.entries()) {
// 인덱스 i 와 요소 element 로 작업수행
}
arr.forEach((element, index) => console.log(element, index))
for (const index in arr) console.log(arr[index], index)
arr.forEach(f)メソッドは、各要素に対してf(element、index、arr)を呼び出す.漏れた要因は省略する.arr.map(f)は、f(element、index、arr)の結果値を含む配列を返す.
[1,7,2,9].map(x => x * x) // [1, 49, 4, 81]
[1,7,2,9].join(' and ') // '1 and 7 and 2 and 9'
forEach、map、filter、find、findIndex、someおよびeachメソッドの関数fは、関数パラメータの後に選択パラメータthisArgを受け入れる.thisArgは関数fのthisパラメータとなる.インデックスごとにthisArgを使用します.f(element,index,arr)関数を呼び出します.疎配列
1つ以上の要素が欠けている配列を疎配列と呼びます.
somNumber = [,2,,9]
somNumber[100] = 1
somNumber.length[200]
delete someNumber[1]
アレイapiの大部分は、疎アレイで欠落している要素を省略している.たとえば、foreachが省略した要素.反対Arrayfrom(arrayLike,f)は例外であり、すべての要素にfを呼び出し、欠落した要素はundefinedを返す.配列を指定すると、新しい配列を返すほとんどの方法では、欠落した要素が保持されます.
sortメソッドは、欠落した要素を後ろに配置します.フィルタ関数で除去できる要素
Array.from([,,9,10,,1]) // [undefined, undefined, 9, 10, undefined, 1]
[,2,,9].map(x => x*x) // [, 4, , 81]
[,2,,9].sort() // [2, 9, , ,]
[,2,,9].filter( x => true ) // [2, 9]
へいぶん
mapメソッドは、集合内のすべての要素が1つの引数しかない限り、関数unary関数を適用します.このセクションで説明するreduce、reduceRightメソッドでは、2つの要素を結合する2つの演算マルチバイナリ演算子を使用します.
const arr = [1,7,2,9]
const result = arr.reduce((x,y) => x + y)
result // 19
arr.reduce((x,y) => 10 * x + y) // 1729
arr.reduce((accum,current) => accum - current, 0) // -19
Reduceのコールバック関数は、実際には次の4つのパラメータを受け入れます.(累積値、現在の配列要素、現在の配列要素のインデックス、配列全体)
function findAll(arr, condition) {
return arr.reduce(
(accum, current, currentIndex) =>
condition(current) ? [...accum, currentIndex] : accum,
[]
)
}
const odds = findAll([1,7,2,9], x => x % 2 !== 0) // [0, 1, 3]
文字列周波数マッピング
// loop
const freq = {}
for (const c of 'Mississippi') {
if (c in freq) {
freq[c] ++
} else {
freq[c] = 1
}
} // {M: 1, i: 4, s: 4, p: 2}
// reduce
[...'Mississippi'].reduce(
(freq, c) => ({...freq, [c]: (c in freq ? freq[c] + 1: 1) }),
{}) // {M: 1, i: 4, s: 4, p: 2}
地図
すべてのJavaScriptオブジェクトはマッピングされますが、Mapクラスを直接使用するメリットは次のとおりです.
const weekdays = new Map(
[["Mon", 0], ["Tue", 1], ["Wed", 2], ["Thu", 3], ["Fri", 4], ["Sat", 5], ["Sun", 6], ])
// Map(7) {'Mon' => 0, 'Tue' => 1, 'Wed' => 2, 'Thu' => 3, 'Fri' => 4, …}
const emptyMap = new Map()
// 항목추가 연쇄적으로 호출가능
map.set(key1, value1).set(key2, value2)
// 항목삭제 , clear 모두 삭제
map.delete(key) // // Returns true if the key was present, false otherwise
// 키존재여부
if (map.has(key)) . . .
// 키의 값
const value = map.get(key) // Returns undefined if the key is not present
// 모든항목 루프
for (const [key, value] of map) {
console.log(key, value)
}
map.forEach((key, value) => {
console.log(key, value)
})
セット
集合重複を許さない要素の集合構造
const weekdays = new Set(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
// {'Mon', 'Tue', 'Wed', 'Thu', 'Fri', …}
const emptySet = new Set()
const setWithElements = new Set(iterable
set.add(x)
// Adds x if not present and returns set for chaining
set.delete(x)
// If x is present, deletes x and returns true, otherwise returns false
set.has(x) // Returns true if x is present
set.clear() // Deletes all elements
for (const value of set) {
console.log(value)
}
set.forEach(value => {
console.log(value)
})
Week MapとWeek Set WeakMap WeakSet
作業概要
パターンタイプパターンのフォーマット
同じフォーマットからなる一連の数値を効率的に格納するには、形式化配列を使用します.
Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
ArrayBuffer
ファイル、データストリーム、画像などを含む連続バイトシーケンスを指す.形式化された配列のデータもArrayBufferに格納される.
複数のWeb API(File API、XMLHttpRequest、WebSocket)がArrayBufferを返します.
練習問題
Reference
この問題について(配列と集合), 我々は、より多くの情報をここで見つけました https://velog.io/@ged/배열과-컬렉션テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol