checkioをやってみて、業務ではあんまりないだろうけど考えさせられる問題だったので解いてみました。
問題内容
const data = [10, 9, 10, 10, 9, 8]
// アウトプットは以下のようにしたい。
// [ 10, 9, 10, 10, 9 ]
上記だと9と10が配列内に重複したデータが存在していますが、8のみ単一のデータとなっています。
こういったインプットに対して、8(重複していないデータ)のみ削除して返すという問題でした。
code
考えた結果が以下のようになります。
他に良い方法があればどなたかご教示ください!
function nonUniqueElements(data) {
// 重複しているデータだけ抽出
const duplicatedList = data.filter(function(row, index, self) {
return self.indexOf(row) !== index
});
// 差集合で重複していないデータのリストを生成
const x = new Set(data)
const y = new Set(duplicatedList)
const noDuplicatedList = Array.from(new Set([...x].filter(e => !y.has(e))))
// 削除処理
noDuplicatedList.forEach(e => {
const index = data.indexOf(e)
if (index === -1) {
return
}
data.splice(index, 1)
})
return data
}