首页 > 解决方案 > 将php脚本转换为javascript

问题描述

我在 PHP 中有这个脚本,我正在尝试将它转换为 JavaScript,我遇到了一些问题,我猜想我做了大部分的对话,但我注意到它是否正确。

这是代码:

var nums = [1,2,3,4];


function getsum(nums,sMinCount){
    var arry_point=[];
    var temp=[];
    var temp_mul=[];

    getarrayset(nums,arry_point,sMinCount,temp);


        arry_point.forEach( function(data)
        {
            var k=1;
            data.forEach( function(value)
            {
                k *= value;
            });

            temp_mul.push(k);
        });

        const reducer = (accumulator, currentValue) => accumulator + currentValue;
        return temp_mul.reduce(reducer);   
}

function getarrayset(nums,arry_point,sMinCount,temp)
{ 
    if(nums.length >= sMinCount){
        if(nums.length ==1 && sMinCount==1 && !nums.includes(arry_point) ){
            arry_point.push(nums);
        }
        else{
            if(nums.length == sMinCount){
                sort(nums);
                if (!nums.includes(arry_point)) {
                    arry_point.push(nums);
                }         
            }        
            for(i=0; i<nums.length; i++){
                var copy_array = nums;

                delete copy_array[i];
                copy_array.sort();

                if(copy_array.length >=sMinCount && !copy_array.includes(temp)){
                    temp.push(copy_array);
                    getarrayset(copy_array,arry_point,sMinCount,temp);
                }

            }
        }
    }

}

console.log(getsum(nums,2));

我得到的错误是:copy_array.sort(); 结果应该是:50

php代码可以在https://3v4l.org/uqip5找到

<?php
$array = [1,2,3,4];
echo (getsum($array,3));

function getsum($array,$size){
    $arry_point=array();
    $temp=array();
    $temp_mul=array();
    getarrayset($array,$arry_point,$size,$temp);
    foreach ($arry_point as $data) {
        $k=1;
        foreach ($data as $value) {
            $k *= $value;
        }
        array_push($temp_mul, $k);
    }
    return array_sum($temp_mul);
}

function getarrayset($array,&$arry_point,$size,&$temp)
{ 
    if(sizeof($array)>=$size){
        if(sizeof($array)==1 && $size==1 && (!in_array($array,$arry_point))){
            array_push($arry_point, $array);
        }
        else{
            if(sizeof($array)==$size){
                sort($array);
                if (!in_array($array, $arry_point)) {
                    array_push($arry_point, $array);
                }         
            }        
            for($i=0;$i<sizeof($array);$i++){
                $copy_array=$array;
                unset($copy_array[$i]);
                sort($copy_array);
                if(sizeof($copy_array)>=$size && (!in_array($copy_array, $temp))){
                    array_push($temp, $copy_array);
                    getarrayset($copy_array,$arry_point,$size,$temp);
                }

            }
        }
    }

}

谢谢

标签: javascriptphp

解决方案


终于被我解决了:)

var keys = [1,2,3,4];

function recursive(cross, s, a) {
    for( var i=s; i < keys.length; i++ ){
        if( !cross ){
            var b = a.slice(0);
            b.push( keys[i] );
            set.push( b );
        }
        else{ 
            a.push(keys[i]); 
            recursive(cross-1, i+1, a); 
            a.splice(-1, 1);
        }
    }
}

var set = [];
recursive(2, 0, []);

const arr1 = set;

const multiply = (a, b) => a * b;

const product = arr => arr.reduce(multiply, 1);

const sumArr = arr1.map(product);

console.log(sumArr.reduce((a, b) => a + b, 0));

推荐阅读