我必須創建一個函式來接收一個陣列,其中每個元素都是一個數字,或者它可以是另一個包含數字的陣列,例如: const array = [1, [2, [3,4]], [5, 6], 7]; 該函式應計算所有值并將其回傳 countArray(array); --> 應該回傳 28 因為 (1 2 3 4 5 6 7)
我試過這個
const array = [1, [2, [3,4]], [5,6], 7];
var countArray = function(array) {
let sum = 0
for (let i = 0; i < array.length; i ) {
if (Array.isArray(array[i])) {
countArray(array[i])
}
sum = sum array[i]
}
return sum
}
console.log(countArray(array));
但這不起作用,有人知道為什么嗎?
uj5u.com熱心網友回復:
首先,您需要為傳入的嵌套陣列做單。
您可以使用flat()方法。
var nestedArray = [0, 1, 2, [3, 4]];
var flatArray = nestedArray.flat(Infinity); // [0,1,2,3,4];
Array.prototype.reduce可用于遍歷陣列,
將當前元素值與之前元素值的總和相加
var totalSum = flatArray.reduce(function (accumulator, a) {
return accumulator a;
}, 0)
所以,
const array = [1, [2, [3,4]], [5,6], 7];
var countArray = function(array) {
var flatArray = array.flat(Infinity);
var totalSum = flatArray.reduce(function (accumulator, a) {
return accumulator a;
}, 0)
return totalSum;
}
console.log(countArray(array))
uj5u.com熱心網友回復:
兩種解決方案。首先是簡單地修改這些行:
if (Array.isArray(array[i])) {
countArray(array[i])
}
sum= sum array[i]
對這些:
if (Array.isArray(array[i])) {
sum = countArray(array[i])
} else {
sum = array[i]
}
或這個:
sum = Array.isArray(array[i]) ? countArray(array[i]) : array[i]
第二種解決方案:
const array = [1, [2, [3,4]], [5,6], 7]
countArray = array => array.flat(Infinity).reduce( (a, c) => a c, 0 );
console.log(countArray(array))
第二種解決方案取決于Array.prototype.flat,這是相當近的(ECMA 2019),因此支持可能不是 100%。還有其他的選擇,不錯的串列在這里
uj5u.com熱心網友回復:
為了省去遞回的作業量,這里有一個簡單的技巧。
通常,它本身flat只會將一系列嵌套陣列展平一層深。如果您提供Infinity作為引數,則可以將嵌套陣列n深度展平,然后您可以reduce覆寫這些元素以獲得總和。
const array = [1, [2, [3,4]], [5,6, [3, [23, [1, 2, [12]]]]], 7];
function countArray(arr) {
return arr
.flat(Infinity)
.reduce((acc, c) => acc c, 0);
}
console.log(countArray(array));
uj5u.com熱心網友回復:
盡可能少地更改您的代碼,您需要將countArray專案的(如果專案是陣列)或專案本身(如果它不是陣列)添加到總和。
const array = [1, [2, [3,4]], [5,6], 7];
var countArray = function(array) {
let sum = 0
for (let i = 0; i < array.length; i ) {
if (Array.isArray(array[i])) {
sum = sum countArray(array[i])
} else {
sum = sum array[i]
}
}
return sum
}
console.log(countArray(array));
uj5u.com熱心網友回復:
您可以使用flat(infinity)來獲取陣列中的所有數字,然后回圈遍歷每個數字以將它們相加。
const array = [1, [2, [3, 4]], [5, 6], 7];
const fixedArray = array.flat(Infinity);
let sum = 0;
for (let index = 0; index < fixedArray.length; index ) {
sum = fixedArray[index];
}
console.log("sum: ", sum);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481231.html
標籤:javascript 数组 功能
上一篇:嘗試將元素添加到動態陣列
