Sum multi keys 取决于总数

Sum multi keys depends on total number

求和多键取决于总数。

即: 我有一个 json 文件的大列表对象或数据集。

var obj = [
  { 'itemz': 'tomato', 'value': 5 },
  { 'itemz': 'potatos', 'value': 3 },
  { 'itemz': 'banana', 'value': 7 },
  { 'itemz': 'orange', 'value': 6 },
  { 'itemz': 'apple', 'value': 4 },
  { 'itemz': 'cherries', 'value': 5 },
  { 'itemz': 'watermelon', 'value': 9 },
  { 'itemz': 'orange', 'value': 8 }
];
var total = prompt("Put the number:");  // i choose 9

我想得到总和为 9 的所有结果项z: 在我们的示例中,结果将是:

项是:

watermelon  //sum=9      
orange, potatos //6+3=9  
apple, tomato   //4+5=9  
apple, cherries //4+5=9  

像这样:

function subsetSum(numbers, target, partial) {
  var s, n, remaining;
 partial = partial || [];
 s=0;
 for(var j=0;j<partial.length;j++){
    s=parseInt(partial[j].value)+ s;
  }

  // check if the partial sum is equals to target

  if (s === target) {
   console.log("combination is");
   var result="";
    partial.forEach(function(i){result=result+i.itemz+",";})
    console.log(result);
  }


  if (s >= target) {
    return;  // if we reach the number why bother to continue
  }

  for (var i = 0; i < numbers.length; i++) {
    n = numbers[i];
    remaining = numbers.slice(i + 1);
    subsetSum(remaining, target, partial.concat([n]));
  }
}
var obj = [
  { 'itemz': 'tomato', 'value': 5 },
  { 'itemz': 'potatos', 'value': 3 },
  { 'itemz': 'banana', 'value': 7 },
  { 'itemz': 'orange', 'value': 6 },
  { 'itemz': 'apple', 'value': 4 },
  { 'itemz': 'cherries', 'value': 5 },
  { 'itemz': 'watermelon', 'value': 9 }
];
subsetSum(obj,24);

var obj = [{
  'itemz': 'tomato',
  'value': 5
}, {
  'itemz': 'potatos',
  'value': 3
}, {
  'itemz': 'banana',
  'value': 7
}, {
  'itemz': 'orange',
  'value': 6
}, {
  'itemz': 'apple',
  'value': 4
}, {
  'itemz': 'cherries',
  'value': 5
}, {
  'itemz': 'watermelon',
  'value': 9
}, {
  'itemz': 'orange',
  'value': 8
}];

var res = obj.filter(function(d) {
  if (d.value == 9) {
    return d;
  }
});

for (var i = 0; i < obj.length; i++) {
  for (var j = 0; j < obj.length; j++) {
    if (obj[i].value + obj[j].value == 9) {
      res.push(obj[i]);
      res.push(obj[j]);
    }
  }
}

function getUniqueElements(arr) {

  var obj = {};
  var objArray = [];
  for (var i = 0; i < arr.length; i++) {
    obj[arr[i]['value']] = arr[i];
  }
  for (var prop in obj) {
    objArray.push(obj[prop]);

  }
  return objArray;
}
var result = getUniqueElements(res);
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');