Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套数组使用深度计数器进行规格化_Javascript - Fatal编程技术网

Javascript 嵌套数组使用深度计数器进行规格化

Javascript 嵌套数组使用深度计数器进行规格化,javascript,Javascript,我试图解决我遇到的这个问题,努力找到解决方案: 问题: 常数arr=[4,3,1,1,2,1] 我们需要求所有元素的和,元素的深度 例如,对于[4,[3,1],1,[[2],1]]=4*1+3*2+1*2+1*1+2*3+ 1*2=21 这是我的解决方案,但是,我没有得到正确的值。有人能用ES5和ES6解决这个问题吗 const b=[4,3,1,1,2,1]];//4*1 + 3*2 + 1*2 + 2*3 + 1*2 + 1*1 函数addNormalize(arr,sum=0,depth

我试图解决我遇到的这个问题,努力找到解决方案:

问题:

常数arr=[4,3,1,1,2,1]

我们需要求所有元素的和,元素的深度

例如,对于[4,[3,1],1,[[2],1]]=4*1+3*2+1*2+1*1+2*3+ 1*2=21

这是我的解决方案,但是,我没有得到正确的值。有人能用ES5和ES6解决这个问题吗

const b=[4,3,1,1,2,1]];//4*1 + 3*2 + 1*2 + 2*3 + 1*2 + 1*1
函数addNormalize(arr,sum=0,depth=1){
for(设i=0;ilog(addNormalize(b))
代码不工作的原因非常简单。字符串、布尔值、整数、浮点值等基本值不是通过引用传递的
,而是通过引用传递的值。这意味着值被复制为不可变值(您可以在另一个函数作用域中更改原始值)

您应该接收在中调用的递归函数返回的值:

    if (Array.isArray(cur)) {
        depth+=1;
        sum += addNormalize(cur, sum);
    }

或者将sum更改为对象,以便通过引用传递sum。

代码无法工作的原因非常简单。字符串、布尔值、整数、浮点值等基本值不是通过引用传递的
,而是通过引用传递的值。这意味着值被复制为不可变值(您可以在另一个函数作用域中更改原始值)

您应该接收在中调用的递归函数返回的值:

    if (Array.isArray(cur)) {
        depth+=1;
        sum += addNormalize(cur, sum);
    }

或者将sum更改为对象,以便通过引用传递sum。

我对您的代码做了一些更正,您试图通过传递“引用”来计算结果,而这在javascript中无法使用原语完成,而且您没有将深度传递给递归调用

const b=[4,3,1,1,2,1]];//4*1 + 3*2 + 1*2 + 1*1 + 2*3 + 1*2
函数addNormalize(arr,深度=1){
设和=0;
for(设i=0;ilog(addNormalize(b))
我对您的代码做了一些更正,您试图通过传递一个“引用”来计算结果,而这在使用原语的javascript中是无法完成的,而且您没有传递递归调用的深度

const b=[4,3,1,1,2,1]];//4*1 + 3*2 + 1*2 + 1*1 + 2*3 + 1*2
函数addNormalize(arr,深度=1){
设和=0;
for(设i=0;ilog(addNormalize(b))
使用
reduce()

const b=[4,3,1,1,2,1];
函数addNormalize(arr,深度=1){
如果(arr.length==0)返回0
返回arr.reduce((a,item)=>a+(Array.isArray(item)?addNormalize(item,depth+1):depth*item),0)
}

log(addNormalize(b))
使用
reduce()

const b=[4,3,1,1,2,1];
函数addNormalize(arr,深度=1){
如果(arr.length==0)返回0
返回arr.reduce((a,item)=>a+(Array.isArray(item)?addNormalize(item,depth+1):depth*item),0)
}

console.log(addNormalize(b))
滚动到底部以查看实现Hey@tom10271我不是在寻找用于展平数组的实现,而是在寻找添加数组(reduce)*声明元素的深度,还是缺少什么?你能切碎一些光线吗?我会将阵列展平,然后缩小它,但我们不想直接添加阵列。我们要添加元素*元素的深度。如果我们变平,我们就会失去深度@tom10271我已经用解释回答了您的原始问题,滚动到底部查看实现Hey@tom10271我不是在寻找用于展平数组的实现,我是在寻找添加数组(减少)*声明元素的深度,还是缺少什么?你能切碎一些光线吗?我会将阵列展平,然后缩小它,但我们不想直接添加阵列。我们要添加元素*元素的深度。如果我们变平,我们就会失去深度@TOM10271我已经解释了你原来的问题