问题描述
在学习基本javascript的旅途中,我遇到了Code Wars网站,该网站面临一个不同的问题。我对JavaScript开发非常陌生,并且通过研究针对这些问题的最佳实践解决方案并尝试重新构建和理解它们,Code Wars在理解基本js逻辑方面起到了很大的帮助作用。在google,youtube等的帮助下,我设法了解了大多数最佳实践解决方案,尽管我现在遇到了问题-最佳实践解决方案-但它帮助我进一步了了对javascript的理解,但是我只是无法理解它的逻辑及其工作原理。我非常感谢能够用假人解释最佳实践解决方案的任何人。
问题:超市中有一个自助结账的队列。您的任务是编写一个函数来计算所有客户退房所需的总时间! 所有说明都可以在CodeWars页面上找到:https://www.codewars.com/kata/57b06f90e298a7b53d000a86/train/javascript
最佳实践解决方案如下:
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],10);
Test.assertEquals(queueTime([2,4,2),9);
Test.assertEquals(queueTime([1,5],100),5);
//add some more example tests here,if you like
})
我遇到的主要困难是我不了解'w'变量如何与'for of'函数相互作用。以我的理解,“ w”是一个填充有零的数组,因此w.indexOf方法如何找到最小值。值添加到idx变量?总的来说,我将非常感谢能够分解最佳实践解决方案的任何人。
谢谢, 杰罗姆(Jerome)
解决方法
最初,w是一个充满0的数组
然后,代码将idx设置为最小值的索引。
该索引第一次为0
let idx = [0,0].indexOf(Math.min([0,0])); // 0
所以对于t === 1,w [0] + = t变为[1,0]
下次:
let idx = [1,0].indexOf(Math.min([1,0])); // 1
所以对于t === 2,w [1] + = t变为[1,2,0]
以此类推