我得到了这个测试来解决它,我解决了它,测试要求返回数字的总和,这很容易返回它,但问题是返回它(如果数字是负数,第一个例如,数字应算作负数)
。
let output = sumDigits(1148);
console.log(output); // --> 14
let output = sumDigits(-316);
console.log(output); // --> 4
就像我说的那样解决
const sumDigits = num => {
let ar = num.toString().split('') //Stringify the num and convert it to an array
let minSum = 0 // initialize the minSum counter and set to the value of 0
let plsSum = 0 // initialize the plsSum counter and set to the value of 0
//checking if the array start with '-', and if it's i'm going to remove it.
if (ar[0] === '-') {
ar.splice(0, 1)
ar.reduce((a, b) => minSum = Math.abs(a - b)) // subtracting the arrray of numbers and convet it to number after removing the first char.
}
// iterate over the array.
for (let i = 0; i < ar.length; i++) {
// adding the sum of array numbers to the initial var and convert it to a number
plsSum += Number(ar[i])
}
//returning the minSum and plsSum
if (minSum) {
return minSum
} else {
return plsSum
}
}
let output = sumDigits(1148)
console.log(output) // --> 14
let output2 = sumDigits(-316)
console.log(output2) // --> 4
但是当我在搜索的时候,我发现这段代码和reduce在一行中,有些代码我看不懂,这就是我问你们的原因。
这是代码
const sumDigits = num =>String(num).split('').reduce((a,v,idx,arr)=> v === '-' ? (v = 0, arr[idx+1] *= -1, a + +v) :a+ +v,0)
所以让我们分解一下。
String(num).split('')
在这部分中,他们将其串起来并将其转换为数组。✔
reduce((a,v,idx,arr)
在这部分中,他们用 4 个参数初始化 reduce。✔
v === '-' ?
在这部分,他们检查是否v
等于'-'
,但问题是 在第一个输出 (1148)v
中从1 开始,在第二个输出 (-316)中从 3 开始,因为将以1和' -'对吧?然后他们设置(v = 0)。然后它们乘以-1我 的问题是为什么? 如果有人不介意解释其余代码,我们将不胜感激。 感谢提前。a
arr[idx+1] *= -1
凤凰求蛊
阿晨1998
长风秋雁
相关分类