Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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
slice()方法/Javascript_Javascript - Fatal编程技术网

slice()方法/Javascript

slice()方法/Javascript,javascript,Javascript,功能支票收银机(价格、现金、cid){ 出租金额={ “一百”:一百, “二十”:二十, “十”:10, "五":五,, "一":一,, “季度”:0.25, “一角”:0.1, “镍”:0.05, “便士”:0.01 } 让copy=cid.slice(); 设sum=cid.map(el=>(el[1])。reduce((a,b)=>(a+b)); 让changeDue=现金-价格; 设newArr=[]; 让结果={}; 如果(总和==到期变更){ result.status='已关闭';

功能支票收银机(价格、现金、cid){
出租金额={
“一百”:一百,
“二十”:二十,
“十”:10,
"五":五,,
"一":一,,
“季度”:0.25,
“一角”:0.1,
“镍”:0.05,
“便士”:0.01
}
让copy=cid.slice();
设sum=cid.map(el=>(el[1])。reduce((a,b)=>(a+b));
让changeDue=现金-价格;
设newArr=[];
让结果={};
如果(总和==到期变更){
result.status='已关闭';
result.change=复制;
}
对于(设i=cid.length-1;i>=0;i--){
让计数=0;
let单位=金额[cid[i][0];

虽然(单位您的代码的问题是它将便士减去为分数,因此,当您对便士数进行算术运算时,您可能会得到不舍入的便士,我的意思是您可以得到0.079999而不是0.08,等等。这是因为0.01在内部仅表示为近似值。整数值的情况并非如此,它们是总是精确地表示。所以,我要做的第一件事是通过计算便士的数量而不是美元的数量来去除分数(其中1便士是1,1美元是100,100美元是10000等等)

举个例子:

console.log(100 - (0.01 + 0.01)) // 99.98
console.log(100 - 0.01 - 0.01) // 99.97999999999999
至于为什么结果会受到影响的主要问题,这是因为尽管您确实通过

let copy = cid.slice();
然而,新数组有相同的元素。我的意思是copy[1]和cid[1]都指向同一个JS对象,恰好是['PENNY',0.5]。从绝对意义上说,这实际上是同一个对象


看,你没有做“深度复制”,你只是做了“浅层”复制。你复制了容器,但内部元素是相同的,它们链接到相同的东西。就像这样。

不确定我是否正确理解了这个问题,但是如果你只是在
if(sum==changeDue)之后放一个
else
语句呢
?因此,如果出现这种情况,您可以避免
for
循环并返回结果。我不知道问题或代码的目的是什么,我尝试了……请重新措辞或使其更简洁,这是不可能的。您想要实现的是什么?我刚刚编辑并检查了答案,以及对m的答案您提到的一个问题…很抱歉解释得不好,也感谢您的回答。问题是我没有使用else语句,因为我认为for循环部分不会影响return语句,甚至我认为for循环中的任何单个代码都不会影响结果。因此,当结果不是我期望的结果时,我想知道是什么让有其他声明和没有其他声明有区别。啊,谢谢你的帮助。我现在明白了。我只是想知道区别。