超市队列-Javascript最佳实践解决方案

超市队列-Javascript最佳实践解决方案,javascript,arrays,indexof,Javascript,Arrays,Indexof,在我学习基本javascript的旅途中,我遇到了CodeWars网站,它面临着不同的问题。我对JavaScript开发非常陌生,通过研究这些问题的最佳实践解决方案并尝试重新构建和理解它们,代码战在理解基本js逻辑方面起到了很大的帮助。在谷歌、youtube等的帮助下,我成功地理解了大多数最佳实践解决方案,它帮助我进一步理解javascript,尽管我现在遇到了一个问题——和一个最佳实践解决方案——但我无法理解它的逻辑和工作原理。我非常感谢任何能用语言为傻瓜解释最佳实践解决方案的人 问题:超市的

在我学习基本javascript的旅途中,我遇到了CodeWars网站,它面临着不同的问题。我对JavaScript开发非常陌生,通过研究这些问题的最佳实践解决方案并尝试重新构建和理解它们,代码战在理解基本js逻辑方面起到了很大的帮助。在谷歌、youtube等的帮助下,我成功地理解了大多数最佳实践解决方案,它帮助我进一步理解javascript,尽管我现在遇到了一个问题——和一个最佳实践解决方案——但我无法理解它的逻辑和工作原理。我非常感谢任何能用语言为傻瓜解释最佳实践解决方案的人

问题:超市的自助收银台排着队。您的任务是编写一个函数来计算所有客户退房所需的总时间! 可以在CodeWars页面上找到所有说明:

最佳实践解决方案如下所示:

function queueTime(customers, n) {
  var w = new Array(n).fill(0);
  for (let t of customers) {
    let idx = w.indexOf(Math.min(...w));
    w[idx] += t;
    
  }
  return Math.max(...w);
}
Test.describe("example tests", function() {
Test.assertEquals(queueTime([], 1), 0);
Test.assertEquals(queueTime([1,2,3,4], 1), 10);
Test.assertEquals(queueTime([2,2,3,3,4,4], 2), 9);
Test.assertEquals(queueTime([1,2,3,4,5], 100), 5);

//add some more example tests here, if you like

})
样本测试:

function queueTime(customers, n) {
  var w = new Array(n).fill(0);
  for (let t of customers) {
    let idx = w.indexOf(Math.min(...w));
    w[idx] += t;
    
  }
  return Math.max(...w);
}
Test.describe("example tests", function() {
Test.assertEquals(queueTime([], 1), 0);
Test.assertEquals(queueTime([1,2,3,4], 1), 10);
Test.assertEquals(queueTime([2,2,3,3,4,4], 2), 9);
Test.assertEquals(queueTime([1,2,3,4,5], 100), 5);

//add some more example tests here, if you like

})
我面临的主要困难是我不理解“w”变量如何与“for of”函数相互作用。在我的理解中,“w”是一个充满零的数组,那么w.indexOf方法如何找到一个最小值来添加到idx变量中呢?总的来说,我会非常感谢任何能够分解最佳实践解决方案的人

谢谢,
Jerome

最初w是一个填充0的数组

然后,代码将idx设置为最低值的索引

第一次该索引将为0

设idx=[0,0,0,0,0].indexOf(Math.min([0,0,0,0,0]);//0

所以w[0]+=t对于t==1变为[1,0,0,0]

下次:

设idx=[1,0,0,0].indexOf(Math.min([1,0,0,0]);//1

因此,对于t==2,w[1]+=t变成了[1,2,0,0,0]

等等