🤖

JavaScriptで配列内の重複していない数字を出す

2020/09/24に公開

JavaScriptで配列内の重複していない数字を出したい時の方法をここで紹介したいと思います。

CodewarsでJavaScriptの問題を解いていると、このような問題がありました。

問題文:
配列内の2つの数字だけが重複せず、残りの数字が重複している数字の配列が与えられます。
この重複していない2つの数字の合計が返ってくる関数を書きなさい。

例:
[4,5,7,5,4,8]という配列が与えられたら、15が返ってくるようにします。なぜなら、7と8の数字が重複せず、その合計が15だからです。

重複していない数字はfilterを使用することで以下のように出す事が出来ます。

const arr = [1,2,2,3,3,4]

const a = arr.filter(x => arr.indexOf(x) === arr.lastIndexOf(x))

console.log(a); // [ 1, 4 ]

他にも

1.重複している数字の配列
2.重複した数字を重複させずに全数字を返す配列
3.重複した数字を単体で返す配列

を出す事も可能なので紹介しておきます。

const arr = [1,2,2,3,3,4]

//重複している数字の配列
const b = arr.filter(x => arr.indexOf(x) !== arr.lastIndexOf(x))

//重複した数字を重複させずに全数字を返す配列
const c = arr.filter((x,i) => arr.indexOf(x) === i)

//重複した数字を単体で返す配列
const d = arr.filter((x,i) => arr.indexOf(x) === i && i !== arr.lastIndexOf(x))

console.log(b); // [ 2, 2, 3, 3 ]
console.log(c); // [ 1, 2, 3, 4 ]
console.log(d); // [ 2, 3 ]

そして、codewarsの問題の話に戻りますが、
重複していない数字を出した後は、reduceを使用する事で答えが出てきます。

arr.filter(x => arr.indexOf(x) === arr.lastIndexOf(x)).reduce((a,b) => a + b)

Discussion