Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中的Reduce方法_Javascript_Arrays - Fatal编程技术网

JavaScript中的Reduce方法

JavaScript中的Reduce方法,javascript,arrays,Javascript,Arrays,我想这更像是一个逻辑问题,但它也涉及到reduce方法。我想这是解决这类问题的合适方法 以下是我的3个阵列: const availableHours=[9,10,11,12,13,14]; 常量exArr1=[9,10,11,12,13,14] 常量exArr2=[10,11,12,13] 第一个表示所有可用的小时数。用户总是预订其中两个,彼此相邻。9和10、13和14、10和11等等。。。在任何配置中。现在,如果用户预订了所有三个集合,即9-10、11-12、13-14,我需要返回true

我想这更像是一个逻辑问题,但它也涉及到reduce方法。我想这是解决这类问题的合适方法

以下是我的3个阵列:

const availableHours=[9,10,11,12,13,14]; 常量exArr1=[9,10,11,12,13,14] 常量exArr2=[10,11,12,13]

第一个表示所有可用的小时数。用户总是预订其中两个,彼此相邻。9和10、13和14、10和11等等。。。在任何配置中。现在,如果用户预订了所有三个集合,即9-10、11-12、13-14,我需要返回true。这意味着这一天已经订满了。但如果是f.ex预订的话。像10-11和12-13一样,它也应该返回真值,因为那些未预订的时间9和14不能预订,因为它们是单小时。两个示例数组都应返回true

你能帮个忙吗?我试着用reduce方法来做,但做不到

谢谢大家!

这个答案没有使用Array.prototype.reduce,但我认为它解决了您的问题

它的工作原理是首先从可用时间列表中删除所有预订的时间。这假设每天的预订是正确的,每小时连续预订一对

然后,它遍历剩余的可用小时数,并检查连续的小时数对。如果没有找到,则视为当天已预订完毕。如果找到一个或多个,则未完全预订

可用常数=[9,10,11,12,13,14]; const day1=[9,10,11,12,13,14]; const day2=[10,11,12,13]; const day3=[9,10,12,13]; const day4=[9,10]; 函数为fullybookedday,可用{ 剩余常数=available.filterhour=>!day.includeHour; 对于let i=0;i const availableHours=[9,10,11,12,13,14]; 常量exArr1=[9,10,11,12,13,14] 常量exArr2=[10,11,12,13] const check=arr,avail=>{ 常量差异=有效。过滤=>!arr.includese 如果差异长度===0 控制台。记录“所有时间已预订” 其他的 控制台。日志“未预订时间:”,差异 返回真值 } console.logcheckexArr1,可用小时
console.logcheckexArr2,availableHours您可以使用过滤器查找所需的块,例如:

const availableHours=[9,10,11,12,13,14]; 常量exArr1=[9,10,11,12,13,14] 常量exArr2=[11,12] 函数getStartTimesarr,已获取{ 返回arr.filteritem,index=>index!=availableHours.length-1 &&!take.includeItem &&!已完成。包括可用小时数[索引+1] } console.loggetStartTimesavailableHours,exArr1 console.loggetStartTimesavailableHours,exArr2如果您想使用Array.prototype.reduce

这里是一个以更实用的方式定义的解决方案

const fullyBooked=可用,已预订=> !预订,减少 //减速机将反向阵列的预定小时数归零 累加器,currentValue=>累加器[currentValue]=0,累加器, //初始值是可用时间的倒数,如果可用,则为1和0的1数组 可用 累加器2,当前值2=>累加器2[currentValue2]=1,累加器2, 新阵列25.0 一些 //如果连续两小时可用,则未完全预订 值,索引,数组=>值和数组[索引+1] ; 控制台。日志记录[9,10,11,12,13,14],[9,10,11,12,13,14]; 控制台。日志记录了[9,10,11,12,13,14],[9,10,11,12,13]; 控制台。日志记录了[9,10,11,12,13,14],[10,11,12,13,14]; 控制台。日志记录了[9,10,11,12,13,14],[9,10,13,14];
控制台。日志记录了[9,10,11,12,13,14],[9,11] 这也不使用reduce,但它会正确地过滤东西,我特别喜欢将函数分离出来,以获得更可读/分段的代码,而不是将所有逻辑推到一个reducer中

可利用常数={ 9:对, 10:对, 11:是的, 12:是的, 13:是的, 14:对, }; 常量exArr1=[9,10,11,12,13,14]; 常数exArr2=[10,11,12,13]; 常量exArr3=[10,11]; 功能剩余小时数{ const stillAvailable=Object.assign{},allAvailable; hours.forEachhour=>{ 删除可用时间[小时]; }; 返回Object.keystallavailable; } 函数有连续小时可用{ 如果可用小时数。长度<2{ 返回false; } 返回时数可用。空翻时数,索引=>{ 如果索引你发布你尝试的代码,你本质上是想检查是否平等。你能不能把这两个数组都转换成字符串并比较一下?availableHours.join==exArr1.join?@fubar否,目标是检查一天是否已预订完毕;或者在那天没有其他约会时返回true对不起,我看错了解释。您需要验证exArr1是否遵循时间相邻的规则吗?如果[9,11,13]过滤器->.includes创建了指数计算,ie会以某种方式失败。你可以用一个loop@user633183,同意。如果您想发布答案或链接到演示提琴,我很想看看如何通过一个循环实现。当连续出现未预订的小时数时,此答案不会返回false。例如,[11,12,13,14]应该返回false,因为[9,10]仍然可以预订。