配列から重複した要素を取り除く方法についてです。 filterを使うと簡単に書けます。
このブログもJavaScriptで動いており、サイドバーのタグのところで使っています。
重複のない配列にする
let array = [0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
// 重複を削除した配列
let result = array.filter(function(x, i, self) {
return self.indexOf(x) === i;
});
console.log(result);
// [ 0, 1, 2, 3, 4, 5 ]
重複のない配列が出来ました。
filter()の解説
Array.prototype.filter()
は配列の各要素を判定してtrue
の要素だけを配列として返します。
MDSのfilter()
のコードを上に合わせて書き直すとこんな感じ。
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(function(x){
return x.length > 6
});
console.log(result);
// ["exuberant", "destruction", "present"]
コールバック関数のx
が各要素に当たり、x.length > 6
がtrue
になっている要素が配列になっていることがわかります。
重複削除の解説
重複のないコードに戻ります。
// 重複を削除した配列
let result = array.filter(function(x, i, self) {
return self.indexOf(x) === i;
});
コールバック関数にx, i, self
の3つが渡っています。
x
は要素、i
が要素のindex、self
はarray自身に当たります。
判定の部分はself.indexOf(x) === i;
です。
self.indexOf(x)
はarrayの中でその要素が現れる最初のindexを返します。
つまり、その要素の前に同じ値の要素がある場合にfalseになる。
よって、重複がない要素だけの配列が出来上がります。
重複した要素
反対に重複している要素を取り出すこともできます。
let array = [0, 1, 2, 2, 3, 3, 3, 4, 5]
// 重複を削除した配列
let result = array.filter(function(x, i, self) {
return self.indexOf(x) !== i; // !== にした
});
console.log(result);
// [ 2, 3, 3 ]
判定式を!==
にすると、重複している要素を取り出すことが出来ました。
ここで、3回以上重複しているとそれも出てきます。
【Electron】PCのスリープと起動イベントを検知する
ElectronNodejsJavaScriptTypeScriptschedule2021-09-06
axiosでリクエスト中の処理をキャンセルする
JavaScriptNodejsschedule2021-08-31
Node.jsでChrome.exeを起動してページを開く方法
NodejsJavaScriptWindowsschedule2021-08-25
【p5js】パーリンノイズとeraseを使ったブックカバー#PCD2021
p5jsProcessingPCD2021JavaScriptschedule2021-02-20
【p5js】砂丘の砂紋のアニメーション#PCD2021
p5jsProcessingPCD2021JavaScriptschedule2021-02-17
個人の技術ブログを作り直しました(3回目)
ブログNuxtjsVuejsTypeScriptJavaScriptNetlifyschedule2020-12-19
nuxt/contentでサイトマップを作る
NuxtjsVuejsTypeScriptJavaScriptschedule2020-12-16
remarkでnuxt/contentのマークダウン書式を拡張する
NuxtjsVuejsTypeScriptJavaScriptschedule2020-12-13