問題:
給定一個整數陣列,回傳一個新陣列,使得新陣列索引 i 處的每個元素都是原始陣列中除 i 處的數字之外的所有數字的乘積。
例如:
如果我們的輸入是 [1, 2, 3, 4, 5],則預期輸出將是 [120, 60, 40, 30, 24]。
如果我們的輸入是 [3, 2, 1],那么預期的輸出將是 [2, 3, 6]。
解決方案 1(使用嵌套回圈):我可以通過如下嵌套回圈解決此問題:
const input = [1, 2, 3, 4, 5];
function output(items) {
const finalArray = [];
for (let i = 0; i < items.length; i ) {
let multipliedNum = 1;
items.forEach((item, indx) => {
if (i !== indx) {
multipliedNum = multipliedNum * item;
}
});
finalArray.push(multipliedNum)
}
return finalArray;
}
console.log(output(input))
我正在嘗試找出在輸出函式中沒有嵌套回圈的另一種解決方案?任何幫助或建議真的很感激。
uj5u.com熱心網友回復:
如果沒有零值,您可以遍歷所有值一次以獲取產品。然后只需回傳每個產品除以每個條目的陣列。
但是,如果有零,則需要做更多的作業來檢查有多少。一個零很好,但超過 1 意味著每個條目的值為零。
const input = [1, 2, 3, 4, 5];
const input2 = [1, 2, 3, 4, 0];
const input3 = [1, 2, 3, 0, 0];
function output(items) {
let zeroCount = 0;
let totalProduct = 1;
for (let i = 0; i < items.length; i ) {
if (items[i] === 0) {
if ( zeroCount > 1) break;
continue;
}
totalProduct *= items[i];
}
if (zeroCount > 1) {
// more than 1 zero -> all values are 0
return new Array(items.length).fill(0);
} else if (zeroCount === 1) {
// only 1 zero -> only the value that is zero will be the totalProduct
return items.map(item => item === 0 ? totalProduct : 0);
}
// no zero in array -> divide the totalProduct by each item
return items.map(item => totalProduct / item);
}
console.log(output(input))
console.log(output(input2))
console.log(output(input3))
uj5u.com熱心網友回復:
根據@Mike 在評論中所說的,這是答案。
const input = [1, 2, 3, 4, 5];
const mulValues = input.reduce((acc, next) => acc * next);
const output = input.map(i => mulValues/i)
console.log(output)
uj5u.com熱心網友回復:
你可以做這樣的事情(假設陣列不包含零):
- 計算所有陣列元素的乘積
- 將乘積除以位置 [i] 處的元素以獲得所需的輸出
const input = [1, 2, 3, 4, 5];
function output(items) {
const finalArray = [];
const multipliedNum=1;
for (let i = 0; i < items.length; i ) {
multipliedNum *= item[i];
}
for (let i = 0; i < items.length; i ) {
finalArray.push(multipliedNum/item[i]);
}
return finalArray;
}
console.log(output(input))
uj5u.com熱心網友回復:
input.reduce((t, v, i) =>
[...t, [
...input.slice(0, i),
...input.slice(i 1)
].reduce((t2, v2) => t2 * v2, 1)], []
);
uj5u.com熱心網友回復:
我知道這已經得到了回答,但我想我有一個更好的。
如果您通過不同的方法處理這個問題,您將看到產品將指數處的價值排除在外,也是產品除以指數處的價值。
如果您知道使用 reduce 函式,則可以使用以下方法簡單地在一行中計算乘積:
items.reduce((a, b) => a * b)
然后只需除以您要忽略的值...就像這樣:
items.reduce((a, b) => a * b) / items[index]
如果您現在想將其壓縮在一行中而不是將其包裝到 for 回圈塊中,您可以簡單地復制陣列并使用 map 函式,結果可能如下所示:
result = [...items].map((v, i) => items.reduce((a, b) => a * b) / v)
我希望這可以幫助您減少代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390691.html
標籤:javascript 数组
上一篇:過濾掉一組設定狀態的專案
