整数のシーケンスが与えられた場合、偶数のインデックスを持つすべての整数の合計に、最後のインデックスの整数を掛けたものを返します

受付中 プログラミング
2024-12-24
masato
これは私の解決策であり、いくつかのテストに合格していますが、すべてではありません。誰かが私を助けて、その理由を説明できますか?ありがとうございました :)
        function evenLast(numbers) {
          let sum = 0;
          let lastNum = numbers.pop();
          let arr = numbers.filter(el => el % 2 === 0);
        
          
          for(let i = 0; i < arr.length; i++) {
            sum += (arr[i] * lastNum);
          } 
          return sum;
        }
        
回答一覧
最後にポップした数値が偶数インデックスの整数だった場合はどうなりますか?numbers.pop()変異することを忘れないでくださいnumbers。また、回答で@Ninaによって強調表示されているように、インデックスではなく値をチェックしています。
masato
ありがとうございました!別のアプローチで試してみます。
masato
これは、最後のインデックスが偶数であるかどうかによって異なり、乗算する前に合計に含める必要があります。
masato
値ではなく、インデックスを確認する必要があります
        let arr = numbers.filter((_, i) => i % 2 === 0);
        
そして、最後のステップで合計を掛けることができます。
        for (let i = 0; i < arr.length; i++) {
            sum += arr[i]);
        } 
        return sum * lastNum;
        
より良いアプローチは、単一のループのみを取り、2の増分を取ることによって値を合計します。
        function evenLast(numbers) {
            let sum = 0;
        
            for (let i = 0; i < numbers.length; i += 2) sum += numbers[i];
        
            return sum * numbers[numbers.length - 1];
        }
        
masato
        function evenLast(arr) {
            var lastarr = arr.slice(arr.length-1)
            //return lastarr;
            let newarr = [];
            for(i=0; i<arr.length; i++){
                if(arr[i] % 2 === 0) {
                    newarr.push(arr[i]); 
                }
            }
                    //return newarr;
                    var sum1 =0; 
                    for(i=0; i<newarr.length; i++) {
                        var sum = newarr[0] * lastarr[0];
                        var sum1 = newarr[1] * lastarr[0];
                        //return sum;
                       var  sum2 = sum1 + sum;
                       //i++;
                    } 
                        return sum2;
        }
        console.log(evenLast([2, 3, 4, 5]))
        
masato