为什么我的函数返回不同于我的console.log()在Chrome浏览器

Why is my function return different than my console.log() in Chrome browser

本文关键字:我的 浏览器 Chrome console 函数 返回 不同于 为什么 log      更新时间:2023-09-26

我完全懵了。我甚至不知道我问这个问题是否正确。这是我的回答>它http://repl.it/BAQ0/151console.logreturn是我所期望的。但是当我将代码放入我的代码编辑器窗口进行培训时,我从console.log获得[array[2]],我的代码不会通过。我在repl>it中的代码下面添加了未通过的测试。我错过了什么?谢谢!

var values = {
'ONE HUNDRED':10000,
'TWENTY':2000,
'TEN':1000,
'FIVE':500,
'ONE':100,
'QUARTER':25,
'DIME':10,
'NICKEL':5,
'PENNY':1
};
var change = [];
var array = [];
function multValuesBy100(arr) {
  //return arr with larger values
  for(var i = 0; i < arr.length; i++) {
    arr[i][1] *= 100;
  }
  return arr;
}
function giveChange(changeDue,arr) {
    var rem = changeDue;
    for(var key in values) {
        var n = Math.floor(rem/values[key]);
        if(n !== 0) {
            change.push([key, ((n*values[key])/100)]);
        }
        rem = changeDue % values[key];
    }
    console.log(change);
    return change;
  }
function changeInDrawer(cid) {
  //returns a number representing the amount of change in the drawer
  var result = 0;
  for(var i = 0; i < cid.length; i++) {
    result += cid[i][1]*100;
  }
  return result;
}
function drawer(price, cash, cid) {
  price *= 100;
  cash *= 100;
  var changeDue = cash - price;
  // Here is your change, ma'am.
  if(changeInDrawer(cid) < changeDue) {
    return "Insufficient Funds";
  } else if(changeInDrawer(cid) === changeDue) {
    return "Closed";
  } else {
    return giveChange(changeDue, cid);
  }
}
// Example cash-in-drawer array:
// [['PENNY', 1.01],
// ['NICKEL', 2.05],
// ['DIME', 3.10],
// ['QUARTER', 4.25],
// ['ONE', 90.00],
// ['FIVE', 55.00],
// ['TEN', 20.00],
// ['TWENTY', 60.00],
// ['ONE HUNDRED', 100.00]]
drawer(19.50, 20.00, [['PENNY', 1.01], ['NICKEL', 2.05], ['DIME', 3.10], ['QUARTER', 4.25], ['ONE', 90.00], ['FIVE', 55.00], ['TEN', 20.00], ['TWENTY', 60.00], ['ONE HUNDRED', 100.00]]);

//------------------ Test below -----------------//
/*assert.deepEqual(drawer(19.50, 20.00, [['PENNY', 1.01], ['NICKEL', 2.05], ['DIME', 3.10], ['QUARTER', 4.25], ['ONE', 90.00], ['FIVE', 55.00], ['TEN', 20.00], ['TWENTY', 60.00], ['ONE HUNDRED', 100.00]]), [['QUARTER', 0.50]], 'return correct change');return correct change: expected [ Array(2) ] to deeply equal [ [ 'QUARTER', 0.5 ] ]*/

可能是因为您从giveChange中定义了change,所以如果测试人员之前运行了其他内容,那么可能在您运行当前测试时,更改已经具有由先前测试推送的一些值。

试着在giveChange中声明,这样就像:

function giveChange(changeDue,arr) {
    // Ensure we use a pure array.
    var change = [];
    var rem = changeDuem;
    for(var key in values) {
        var n = Math.floor(rem/values[key]);
        if(n !== 0) {
            change.push([key, ((n*values[key])/100)]);
        }
        rem = changeDue % values[key];
    }
    console.log(change);
    return change;
  }

另一点是[array[2]]是未扩展格式时,chrome日志objectarray,其中包含非原语类型。Repl。它应该只是为了方便用户阅读而展开,结果应该是一样的。