古い話をしていますが、Javascriptでは、行列はどうやって重いですか?
4176 ワード
与えられた配列の重複をどのように除去するかについては、Javascript面接で最も一般的な問題です.最も一般的な方法は3つあります.
https://developer.mozilla.org...まず、 一意性は、元の値または対象に対して参照
使用
https://developer.mozilla.org...1つ目のパラメータ:1つのコールバック関数、 2番目のパラメータ:コールバック関数 上記のように重量除去の方法を下記のように書き直したら、全体
値
保留するべきですか
を選択します.
0
1
保留
初登場
1
2
保留
初登場
2
メー
保存
初登場
3
1
削除
二回目の出現
4
スーパーボール
保留
初登場
5
メー
削除
二回目の出現
6
メー
削除
三度目の出現
7
スーパーボール
削除
二回目の出現
8
4
保留
初登場
使用
https://developer.mozilla.org...
Set
Array.prototype.filter
及びArray.prototype.reduce
簡単なデータのみの配列にとって、私は好きです.const originalArray = [1, 2, ' ', 1, 'Super Ball', ' ', ' ', 'Super Ball', 4]
const bySet = [...new Set(originalArray)]
const byFilter = originalArray.filter((item, index) => originalArray.indexOf(item) === index)
const byReduce = originalArray.reduce((unique, item) => unique.includes(item) ? unique : [...unique, item], [])
使用Set
まず見てみます.Set
一体何ですか?Set
オブジェクトは、元の値または対象の参照にかかわらず、任意のタイプの一意の値を格納することができます.https://developer.mozilla.org...
Set
中には唯一の値しか認められていないSet
この部分の動作を分割してみます.const originalArray = [1, 2, ' ', 1, 'Super Ball', ' ', ' ', 'Super Ball', 4]
const uniqueSet = new Set(originalArray)
// Set(5) [ 1, 2, " ", "Super Ball", 4 ]
const bySet = [...uniqueSet]
// Array(5) [ 1, 2, " ", "Super Ball", 4 ]
const bySet = [...new Set(originalArray)]
Set
に変更した場合にも使用可能Array
.使用
Array.from(set)
理解Array.prototype.filter
方法はなぜ重いのか、もう一つの方法filter
indexOf
方法は配列に戻り、与えられた要素の最初のインデックスが見つかります.存在しない場合は、戻ります.indexOf()
https://developer.mozilla.org... const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));
// expected output: 1
// start from index 2
console.log(beasts.indexOf('bison', 2));
// expected output: 4
console.log(beasts.indexOf('giraffe'));
// expected output: -1
-1
方法は、提供された関数によって実現されるテストのすべての要素を含む新しい配列を作成する.https://developer.mozilla.org...
filter()
方法は2つのパラメータを受け入れる:filter
データのそれぞれをこの関数に渡し、その関数が真の値に戻るとデータが保存され、偽の値に戻ると、データは新たに生成されたデータには現れないfilter
の指向this
の実行過程がよく分かります.const originalArray = [1, 2, ' ', 1, 'Super Ball', ' ', ' ', 'Super Ball', 4]
const table = []
const byFilter = originalArray.filter((item, index) => {
// ,
const shouldKeep = originalArray.indexOf(item) === index
table.push({
: index,
: item,
: shouldKeep ? ' ' : ' '
})
return shouldKeep
})
console.log(byFilter)
console.table(table)
番号付け値
保留するべきですか
を選択します.
0
1
保留
初登場
1
2
保留
初登場
2
メー
保存
初登場
3
1
削除
二回目の出現
4
スーパーボール
保留
初登場
5
メー
削除
二回目の出現
6
メー
削除
三度目の出現
7
スーパーボール
削除
二回目の出現
8
4
保留
初登場
使用
filter
Array.prototype.reduce
配列の各要素に対して、方法が提供されるreduce()
関数(昇順実行)は、その結果を単一の戻り値にまとめます.https://developer.mozilla.org...
reducer
方法は2つのパラメータを受け入れる:Array.prototype.reduce
:コールバック関数は、4つのパラメータを受け取ることができます.Callback
:積算器は、実は多くの人が見落としている点です.つまり、積算器はどんな種類のデータでもいいです.Accumulator
:現在値Current Value
:現在値の索引Current Index
:ソース配列Source Array
:積算器の初期値は積算器と同じで、このパラメータも常に圧倒的多数の人に無視されているInitial Value
チャプタのように、私達は見に来ました.filter
実行過程:const originalArray = [1, 2, ' ', 1, 'Super Ball', ' ', ' ', 'Super Ball', 4]
const byReduce = originalArray.reduce((unique, item, index, source) => {
const exist = unique.includes(item)
const next = unique.includes(item) ? unique : [...unique, item]
console.group(` ${index} `)
console.log(' :', unique)
console.log(' :', item)
console.log(' ?', exist)
console.log(' ', next)
console.groupEnd()
return next
}, [])