我试图递归地遍历一个数组,收集所有的值并求和.任何这样做的try 都会导致堆栈溢出.告诉我如何在不使用附加变量的情况下实现函数1)使用附加变量2).

 const numbers = [
    {
        number: [
            {
                number: 3,
            },
            {
                number: [
                    {
                        number: 5
                    }
                ]
            },
        ]
    },
    {
        number: 8
    }
]

function getSumOfNumbers(numbers) {
    if (Array.isArray(numbers)) {
        for (const child of numbers) {
            getSumOfNumbers(child);
        }
    }
    if (!Array.isArray(numbers) && typeof (numbers) == 'object') {
        for (const key in numbers) {
            getSumOfNumbers(numbers[key]);
        }
    }
    if (typeof (numbers) == 'number') {
        return numbers + getSumOfNumbers(numbers);
    }
}

getSumOfNumbers(numbers)

推荐答案

你的意思是只返回减少的值?

const getSumOfNumbers = (numbers) => {
  if (typeof numbers === 'number') return numbers;
  else if (Array.isArray(numbers)) return numbers.reduce((acc, child) => acc + getSumOfNumbers(child), 0);
  else if (typeof numbers === 'object' && numbers !== null)  return Object.values(numbers).reduce((acc, value) => acc + getSumOfNumbers(value), 0);
  return 0;
};

console.log(getSumOfNumbers(numbers))
<script>
  const numbers = [{
      number: [{
          number: 3,
        },
        {
          number: [{
            number: 5
          }]
        },
      ]
    },
    {
      number: 8
    }
  ]
</script>

分散

const getSumOfNumbers = (numbers) => typeof numbers === 'number' ? numbers :
  (Array.isArray(numbers) || (typeof numbers === 'object' && numbers !== null)) ?
  Object.values(numbers).reduce((acc, value) => acc + getSumOfNumbers(value), 0) : 0;


console.log(getSumOfNumbers(numbers));
<script>
const numbers = [
  {
    number: [
      {
        number: 3,
      },
      {
        number: [
          {
            number: 5
          }
        ]
      },
    ]
  },
  {
    number: 8
  },
  5,  // Simple number
  [1, 2, [3, 4]],  // Nested list
  {"a": 1, "b": 2, "c": {"d": 3, "e": 4}},  // Nested object
  [1, [2, [3, [4, [5]]]]],  // Deeply nested list
  {"a": 1, "b": {"c": 2, "d": {"e": 3, "f": 4}}},  // Deeply nested object
  [],  // Empty list
  {},  // Empty object
  null  // Null value
];

</script>

Javascript相关问答推荐

React Hooks中useState的同步问题

如何从JSON数组添加Google Maps标记—或者如何为数组添加参数到标记构造器

如何从调整大小/zoom 的SVG路径定义新的d属性?""

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

VUE 3捕获错误并呈现另一个组件

如何在Press上重新启动EXPO-AV视频?

删除元素属性或样式属性的首选方法

如何用javascript更改元素的宽度和高度?

无法检索与Puppeteer的蒸汽游戏的Bundle 包价格

处理TypeScrip Vue组件未初始化的react 对象

将相关数据组合到两个不同的数组中

P5.js中的分形树

如何使用抽屉屏幕及其子屏幕/组件的上下文?

将延迟加载的模块转换为Eager 加载的模块

如何在Web项目中同步语音合成和文本 colored颜色 更改

Firefox的绝对定位没有达到预期效果

为什么我的InDesign Java脚本不能完全工作?

在D3.js中创建具有旋转手柄的可拖动、可调整大小的框?