我必須將陣列中所有元素的符號相乘。
例如1:
input: [1, 2, 3]
output: 1
Explain: 1 * 1 * 1 = 1
例 2:
input: [1, -2, 3]
output: -1
Explain: 1 * (-1) * 1 = -1
例 3:
input: [1, -2, 3, 0]
output: 0
Explain: 1 * (-1) * 1 * 0 = 0
這是我的解決方案
function cal(A)
{
return A.reduce((total, currentValue) => total * Math.sign(currentValue), 1);
}
但是,ex3 的輸出cal([1, -2, 3, 0])是-0.
我已經考慮過再添加一個這樣的條件
function cal(A)
{
var total = A.reduce((total, currentValue) => total * Math.sign(currentValue), 1);
if(total === 0)
return 0;
else
return total;
}
顯然,它看起來很丑。有沒有更優雅的方法來解決這個問題?
uj5u.com熱心網友回復:
為了避免條件檢查并保持函式純計算,您可以使用奇怪的規則-0簡單地將 0 添加到您的結果中,reduce()這對非零結果沒有影響,但會產生轉換-0為0.
function cal(arr) {
return arr.reduce((a, c) => a * Math.sign(c), 1) 0;
}
console.log(cal([1, 2, 3])); // 1
console.log(cal([1, -2, 3])); // -1
console.log(cal([1, -2, 3, 0])); // 0
有關更一般性的討論,請參見帶符號的零。
uj5u.com熱心網友回復:
在您的示例中,無需將所有值相乘。如果至少有一個零,則結果為零,因此無需遍歷整個陣列。下面的例子:
function compute(arr)
{
let result = true;
for (let item of arr) {
if (item === 0) return 0;
if (item < 0) result = !result;
}
return result ? 1 : -1;
}
console.log(compute([1, 2, 3]));
console.log(compute([1, -2, 3]));
console.log(compute([1, -2, 3, 0]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496545.html
標籤:javascript 数组 算法 零
