javascript - 阵列处理逻辑校正

标签 javascript arrays sorting arraylist multidimensional-array

我有一个数组[1,2,4,5,1,7,8,9,2,3]

我希望它生成值之和小于 10 的所有子集

当前结果[[1,2,4],[5,1],[7],[8],[9],[2,3]]

预期结果[[4,5,1],[9,1],[8,2],[3,7],[1,2]]

这就是我所做的

var a = [1,2,4,5,1,7,8,9,2,3], tempArr = []; tempSum = 0, result = [];
for (var i = 0;i< a.length; i += 1 ) {
  tempSum+=a[i];
  tempArr.push(a[i]);
  if((tempSum+a[i+1])>10) {
     result.push(tempArr);
     tempSum = 0;
     tempArr = [];
  } else if (i == a.length-1 && tempArr.length > 0) { // if array is [1,2,3]
    result.push(tempArr);
  }
}

但它给了我[[1,2,4],[5,1],[7],[8],[9],[2,3]]并且它有6 个子集,但我希望得到 [[4,5,1],[9,1],[8,2],[3,7],[1,2]] 其中有5 个子集。

最佳答案

以下逻辑是 JavaScript 中的:-

var limit = 10;
var  arr = [1,2,4,5,1,7,8,9,2,3];
arr.sort();
var ans = new Array ( );
while(arr.length >0){
    var ts = arr[arr.length-1];
    arr.splice(arr.length-1 , 1);   
    var ta= new Array ( );
    ta.push(ts);
    var x = arr.length-1;
    while(x>=0){    
        if(ts + arr[x] <= limit){       
            ts = ts + arr[x];           
            ta.push(arr[x]);        
            arr.splice(x , 1);
        }
        x= x-1;
    }
        ans.push(JSON.stringify(ta));   
}
alert(ans);

它正在根据需要提供输出。

[9,1],[8,2],[7,3],[5,4,1],[2]

关于javascript - 阵列处理逻辑校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43536944/

相关文章:

javascript - 更改 jquery ajax 表中一行的字体颜色

javascript - 在日期数组中,如何查找给定日期(javascript)中最接近的前一个日期?

java - 这两种冒泡排序算法有什么区别?

javascript - 无法通过在 javascript 中识别对象的父 ID 将对象插入父数组

arrays - 在所有元素来自集合 {1, 2, …, n} 的数组中,哪个数组的反转次数最多?它有多少个反转?

r - 如何按其中一行的子集的平均值对数据框进行排序?

c++ - 可以根据任何属性对对象数组进行排序的函数模板

javascript - 使用Google脚本从Google表格中的单元格列表中获取数组

javascript - 返回隐藏元素时的JS动画循环

javascript - 从 textarea 中删除顶行的最简洁(和快速)方法