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
- itemz 属性是唯一的,所以没有重复。
- 值不是唯一的。
- 我选择小数来快速计算并得到我的观点。
- 如果可以使收音机最多选择一项或两项或三项进行搜索。
- 结果不能重复,即:“potatos, potatos, potatos”。
- 支持 utf-8。
像这样:
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>');
求和多键取决于总数。
即: 我有一个 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
- itemz 属性是唯一的,所以没有重复。
- 值不是唯一的。
- 我选择小数来快速计算并得到我的观点。
- 如果可以使收音机最多选择一项或两项或三项进行搜索。
- 结果不能重复,即:“potatos, potatos, potatos”。
- 支持 utf-8。
像这样:
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>');