[TIL]22.01.30


new Set
Setオブジェクトを使用する理由は、JavaScriptから重複するデータを削除するためです.次に、構造分解割当構文(Setオブジェクトなど)を使用して、データを配列形式で表示できます.
let arr = [1,2,3,4,5];
const set1 = new Set([1, 2, 3, 4, 5]);
set1.add(arr);

console.log([...set1])
=> [1, 2, 3, 4, 5, Array(5)]
set1.add({id: 1, title: "jocker"}) // 객체도 할당가능
new Map
mapオブジェクトには、次のキーペアがあります.
mapはオブジェクトの順序とは異なります使用できます.(配列形式で出力)
const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

console.log(map1.get('a'));
// expected output: 1

map1.set('a', 97);

console.log(map1.get('a'));
// expected output: 97

console.log(map1.size);
// expected output: 3

map1.delete('b');

console.log(map1.size);
// expected output: 2
今日のアルゴリズム
function solution(id_list, report, k){
    // report에서 유저와 신고한 id를 객체를 가진 배열로 만든다.
    let objTemp = [...new Set(report)].map((data) => {
        return {user: data.split(" ")[0], reportedUser: data.split(" ")[1]}
    });
    // 만든 객체에서 신고당한 횟수를 각 유저 객체에 넣는다.
    let reportedUsers = getReportedPeople(id_list, report, k);
    objTemp = objTemp.map((data, idx)=>{
        data["reportedNumber"] = reportedUsers[idx];
        return data;
    })
    // 신고한 유저의 신고당한 유저가 k번 이상 신고를 당했을시 신고한 유저가 메일을 받게된다.
    // 배열을 반환해야하므로, id_list에 맞춰서 [] 반환한다. (조금 추상적일 수 있겠다.)
    
}

// input
//["muzi", "frodo", "apeach", "neo"], ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 2
// output
// { 유저, 유저가 신고한 ID, 신고당한 횟수}
// [정지된 ID]

/*
    0: {user: 'muzi', reportedUser: 'frodo'}
1: {user: 'apeach', reportedUser: 'frodo'}
2: {user: 'frodo', reportedUser: 'neo'}
3: {user: 'muzi', reportedUser: 'neo'}
4: {user: 'apeach', reportedUser: 'muzi'}
*/
function getReportedPeople(id_list, report, k){
    let objTemp = {};
    let result = [];
    
    for(let i = 0; i < id_list.length; i++){
        objTemp[id_list[i]] = 0;
    }
    
    for(let i = 0; i < report.length; i++){
        if(report[i] === report[i + 1]){
            continue;
        }else{
            let reportedPerson = report[i].split(" ")[1];
            objTemp[reportedPerson] += 1;
        }
    }
    

    for(let i = 0; i < id_list.length; i++){
        result.push(objTemp[id_list[i]]);
    }
    
    return result;
}
論理的思考に欠けているようだ.意識的にもっと時間をかけるだけです.