Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多维数组:具有相同字符串值的数值总和_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

Javascript 多维数组:具有相同字符串值的数值总和

Javascript 多维数组:具有相同字符串值的数值总和,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正在构建一个JavaScript收银机,根据收银机中的内容返回变化。这是针对freeCodeCamp挑战的: 不幸的是,我很接近,但被卡住了 我有一个名为addResult()的函数,它接受两个参数,name和val var result = []; function addResult(name, val){ result.push([name, val]); } 因此,如果所需的更改是$18,那么该函数将构建这样的数组 [["ONE", 1.00], ["ONE", 1.00],

我正在构建一个JavaScript收银机,根据收银机中的内容返回变化。这是针对freeCodeCamp挑战的:

不幸的是,我很接近,但被卡住了

我有一个名为
addResult()
的函数,它接受两个参数,
name
val

var result = [];
function addResult(name, val){
    result.push([name, val]);
}
因此,如果所需的更改是$18,那么该函数将构建这样的数组

[["ONE", 1.00], ["ONE", 1.00], ["ONE", 1.00], ["FIVE", 5.00], ["TEN", 10.00]]
我希望函数可以这样构建:

[["ONE", 3.00], ["FIVE", 5.00], ["TEN", 10.00]]
所以我需要有唯一的字符串名,但我不能计算出如何求和

如果有人对完整代码感兴趣,请参阅:

功能支票收银机(价格、现金、cid){
var totalCash=Math.round(calculateTotalCash()).toFixed(2);
var changeDue=(现金-价格)*100;//50
var结果=[];
风险值=[
{name:'PENNY',val:1},
{name:'NICKEL',val:5},
{name:'DIME',val:10},
{name:'QUARTER',val:25},
{name:'ONE',val:100},
{name:'FIVE',val:500},
{name:'TEN',val:1000},
{name:'two',val:2000},
{姓名:'100',val:10000}
];
函数calculateTotalCash(){
var结果=0;
对于(变量i=0;i0&&i>0){
//获取抽屉中剩余的货币数量
var quantity=getQuantity(金额[i].name);
//console.log(数量、金额[i].name);
//警报(一);
//如果货币较小,则剩下零钱,剩下货币
如果(金额[i].val 0){
//从零钱中减去货币
changeCount=changeCount-货币[i].val;
//从抽屉里取钱
cid[i][1]=((cid[i][1]*100)-金额[i].val)/100;
addResult(货币[i].name,货币[i].val);
}否则{
//移动到下一个最小货币,然后重试
我--;
}
}
控制台日志(结果);
如果(更改计数>0){
返回
}
//控制台日志(更改计数/100);
返回更改计数;
}
//抽屉中现金阵列示例:
//[“便士”,1.01],
//[“镍”,2.05],
//[“一角”,3.10],
//[“季度”,4.25],
//[“一”,90.00],
//[“五”,55.00],
//[“十”,20.00],
//[“二十”,60.00],
//[“一百”,100.00]]
支票收银机(19.50,20.00,[“便士”,1.01],“镍币”,2.05],“一角”,3.10],“四分之一”,4.25],“一”,90.00],“五”,55.00],“十”,20.00],“二十”,60.00],“一百”,100.00];
//找零
//循环往复
//检查最高monie是否大于更改
//如果是,则转到下一个最低点
//当你发现一个比变化小时,从变化中减去它
//如果仍然需要剩余的更改,请尝试再次减去
//检查它是否高于更改值

//执行此操作直到精确的更改匹配为止
一个简单的解决方法是更改
addResult
函数以检查给定名称是否已经存在,如果已经存在,则向其添加值

function addResult(name, val){
    let m = result.find(e => e[0] === name);
    if (m) {
        m[1] += val;
    } else {
        result.push([name, val]);
    }
}
让结果=[
[“一”,1.00],
[“五”,5.00],
[“十”,10.00]
];
函数addResult(名称,val){
设m=result.find(e=>e[0]==name);
如果(m){
m[1]+=val;
}否则{
结果推送([name,val]);
}
}
添加结果(“一”,1);

控制台日志(结果)现金总额的另一种方式:

函数SumCash(当前,添加){
var-holder={};
当前.forEach(函数(d){
if(持有人拥有自己的财产(姓名)){
持有人[d.name]=持有人[d.name]+d.value;
}否则{
持有人[d.name]=d.value;
}
});
add.forEach(函数(d){
if(持有人拥有自己的财产(姓名)){
持有人[d.name]=持有人[d.name]+d.value;
}否则{
持有人[d.name]=d.value;
}
});
var obj2=[];
用于(支架中的var支柱){
obj2.push({name:prop,value:holder[prop]});
}
console.log(obj2);
返回obj2;
}
无功电流=[
{name:'PENNY',值:1},
{名称:'镍',值:5},
{name:'DIME',值:10},
{name:'QUARTER',值:25},
{name:'ONE',value:100},
{name:'FIVE',value:500},
{name:'TEN',value:1000},
{name:'two',value:2000},
{名称:'100',值:10000}
];
变量添加=[
{name:'PENNY',值:1},
{名称:'镍',值:5},
{name:'DIME',值:10},
];
SumCash(当前,添加)