[プログラマー/js]2つ引いてもう1つ追加


整数配列番号から2つの数値を抽出し、作成可能なすべての数値を昇順に配列に挿入して、返されるソルバを取得します.

重複する数値をクリアすることが重要です


1.if文による重複除外

function solution(numbers) {
    let answer = [];

    for(let i=0; i<numbers.length; i++) {
        for(let j=i+1; j<numbers.length; j++) {
            let num = numbers[i]+numbers[j];
          
            if(answer.indexOf(num)===-1) answer.push(num);
        }
    }

    return answer.sort((a,b)=> a-b);
}

let arr = [2,1,3,4,1];
console.log(solution(arr));  // [ 2, 3, 4, 5, 6, 7 ]

  • array.indexOf(value)の使用
    :値のインデックスがない場合は、-1を返します.つまり、値が配列内のXに存在します.

  • forドアを回して、対応する値が存在しない場合にのみ配列に入れます.値がすでに存在する場合、インデックスは存在するため、条件文を満たすことはできません.

  • 配列は昇順で並べ替えられます.sort((a,b)=>a-b)コードの使用
    :数値については、Unicodeとみなされるため、コールバック関数を使用する必要があります.
  • 2.Setオブジェクトによる重複除外

    function solution(numbers) {
        const temp = [];
        for(let i=0; i<numbers.length; i++){
            for(let j=i+1; j<numbers.length; j++){
                temp.push(numbers[i]+numbers[j]);
            }
        }
        const answer = [...new Set(temp)].sort((a,b) => a-b);
    
        return answer;
    }
    
    let arr = [2,1,3,4,1];
    console.log(solution(arr));  // [ 2, 3, 4, 5, 6, 7 ]
  • Setオブジェクトを使用してtemp配列をループし、一意の値のみを返し、返された配列を昇順に並べ替えて答えを返します.
  • Setオブジェクト
  • の挿入順に要素を循環する、データ型を問わず一意の値
  • を記憶する.
  • の1つのセットのうちの1つの値は一意であり、重複値X
  • が存在する.
    const set1 = new Set([1,2,3,3,2,1,2,2])
    console.log(set1);   // Set(3) {1, 2, 3}