3 回答

TA貢獻1825條經驗 獲得超4個贊
您可以Math.abs在拆分之前使用數字并將其轉換為字符串,然后使用 reduce 來計算總和。在從函數返回之前檢查輸入是小于還是大于 0 并相應地采取措施
function sumDigits(num) {
// toString will convert to string so an array of string can be created
const sum = Math.abs(num).toString().split('').reduce((acc, curr) => {
// converting string to number before adding with previous digit
// else it will do string concatenation instead of mathematical addition
acc += +curr;
return acc
}, 0);
return num < 0 ? -1 * sum : sum;
}
let output = sumDigits(1148);
console.log(output); // --> 14
let outpu2t = sumDigits(-316);
console.log(outpu2t); // --> -10

TA貢獻2037條經驗 獲得超6個贊
我將重點關注 reduce 方法的部分。reduce Array 方法可以接收兩個參數,第一個表示將“減少”數組的回調,這個回調可以接收 4 個參數:
電池
當前值
當前指數
大批
reduce 方法的第二個參數指示哪個值將啟動回調的Acumulator參數。
一旦解釋說,在您看到的示例中,他表示累加器將從 0 值開始:
.reduce(<...>, 0)
然后,在 reduce 方法的第一次迭代中,當前值的第一個值將是數組的 0 索引值。
num
如果我們考慮是的情況-316
,那么:
第一次迭代:回調變量將是:
a = 0
v = '-'
idx = 0
arr = ['-', '3', '1', '6']
該過程將是:
v === '-' //true, then:
v = 0
arr[idx+1] *= -1 //here, he are converting the value next to the sign to a negative value
a + +v //then, he add the v value to the acumulator with the corresponding sign.
第二次迭代:回調變量
a = 0
v = -3
idx = 1
arr = ['-', -3, '1', '6']
過程:
v === '-' //false, then:
a + +v //a = 0, v = -3. 0 + +(-3) = -3 (Number)
我認為你可以貶低故事的其余部分。

TA貢獻1757條經驗 獲得超7個贊
簡短回答:arr[idx+1] *= -1直接將數組中的下一個成員操作為負整數。
您可以在 Javascript Playground 上嘗試以下代碼,以查看每個循環步驟的變量值,以便更好地理解:(這是您試圖理解的代碼的擴展版本)
function sum(num) {
s = String(num)
.split('')
.reduce(function (a, v, idx, arr) {
console.log('a=', a, 'v=', v, 'idx=', idx, 'arr=', arr);
if (v === '-') {
v = 0;
arr[idx + 1] *= -1;
a += +v;
} else {
a += +v;
}
return a;
}, 0);
return s;
}
console.log(sum(1148));
console.log(sum(-316));
添加回答
舉報