javascript - 将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);
}
}
}
}
}
谢谢
解决方案
终于被我解决了:)
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));