簡體   English   中英

如何對 JavaScript 中的嵌套 arrays 求和

[英]How to sum nested arrays in JavaScript

我正在嘗試創建一個 function,它將數組中所有值的總和相加,即使這些值嵌套在嵌套的 arrays 中。 像這樣:countArray(array); --> 28 (1 + 2 + 3 + 4 + 5 + 6 + 7) 我試過這個遞歸 function,但它只是連接起來。

 var countArray = function(array){ var sum=0; for(let i=0; i<array.length; i++){ if(array[i].isArray){ array[i]=countArray(array[i]); } sum+=array[i]; } return sum; }

使用Array.flat()平數組,然后使用Array.reduce()求和:

 const countArray = array => array.flat(Infinity).reduce((sum, n) => sum + n, 0) console.log(countArray([1, 2, [3, [4, 5], 6], 7]));

  1. 使用Array.isArray檢查 object 是否為數組。
  2. 每次將遞歸調用的結果加到 sum 中。

 var countArray = function(array) { var sum = 0; for (let i = 0; i < array.length; i++) { if (Array.isArray(array[i])) { sum += countArray(array[i]); } else { sum += array[i]; } } return sum; } console.log(countArray([1, 2, [3, [4, 5], 6], 7]));

您還可以將Array#reduce與遞歸 function 一起使用。

 const countArray = array => array.reduce((acc,curr)=> acc + (Array.isArray(curr)? countArray(curr): curr), 0); console.log(countArray([1, 2, [3, [4, 5], 6], 7]));

這個問題可以簡化為通過預先使用Array#flat來查找一維數組中所有元素的總和。

 const countArray = array => array.flat(Infinity).reduce((acc,curr)=>acc+curr, 0); console.log(countArray([1, 2, [3, [4, 5], 6], 7]));

Beside the problem of right application of Array.isArray , you have an actual use case for taking a named function , because you call the function recursively and by uzsing just a variable, the reference of the function could go.

function countArray(array) {
    var sum = 0;
    for (const value of array) {
        sum += Array.isArray(value) ? countArray(value) : value;
    }
    return sum;
}

您的工作示例:

 const arr = [1, [2, [3]]] const countArray = function(array) { let sum = 0; for (let i = 0; i < array.length; i++) { if (Array.isArray(array[i])) { sum += countArray(array[i]); } else { sum += array[i]; } } return sum; } console.log(countArray(arr));

一個簡單的例子:

 const arr = [1, [2, [3]]] const countArray = (array) => { let sum = 0; for (const el of array) { sum += Array.isArray(el)? countArray(el): el } return sum; } console.log(countArray(arr));

更簡單的代碼:

 const arr = [1, [2, [3]]] const countArray = (array) => array.reduce((sum, el) => Array.isArray(el)? sum + countArray(el): sum + el, // reduce function 0); // sum = 0 intialization console.log(countArray(arr));

使用 ramda:

const sumNested = compose(sum, flatten)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM