重复直到达到精确值

时间:2018-10-05 11:19:13

标签: javascript jquery

好的,假设我有两个相等的数组

var arrayData=[800,802,804,806]
var arrayLabels=['11/10/2018','12/10/2018','13/10/2018','14/10/2018']

我如何创建一个循环,一旦arrayData达到1000,并且console.log到达arrayLabel时就停止?

基本上,我想知道在哪个日期达到某个值。

如果没有永远的循环,我什么也想不起来。

谢谢!

3 个答案:

答案 0 :(得分:2)

那么,数组是通过索引连接的吗?

arrayData中的值802应该从arrayLabels返回'12 / 10/2018'吗?

如果是这种情况:

const index = arrayData.indexOf(1000);
if(index !== -1) console.log(arrayLabels[index];

答案 1 :(得分:0)

如果您只想知道日期将是“ 1000”,则可以将日期偏移为800,将其与1000的差除以2。这实际上是在为您提供离开的天数可以预期日期为1000。

const arrayData = [ 800, 802, 804, 806 ]
const arrayLabels = [ '11/10/2018', '12/10/2018', '13/10/2018', '14/10/2018' ]

function dateAt(number) {
  const diff = number - 800
  const date = new Date('2018-10-11')
  date.setDate(date.getDate() + diff / 2)
  return date
}

function numberFor(dateString) {
  const date = dateString.split('/').reverse().join('-')
  const diff = new Date(date) - new Date('2018-10-11')
  return 800 + diff / (1000 * 60 * 60 * 24) * 2
}

const dates = arrayData.map(n => dateAt(n))
const numbers = arrayLabels.map(d => numberFor(d))

console.log({ dates, numbers })
console.log(`Date @ 1000 = ${dateAt(1000).toString()}`)

答案 2 :(得分:0)

跳过阵列,您不需要它们。

假设您的start_number = 699和您的start_date = 11\11\2018

计算start_number1000(在这种情况下为diff = 301)之间的差。

如果您是steps = 2,则在( diff / steps ) = 150.5之后知道您到达了1000。将其四舍五入为151(您希望等于或大于1000)。

然后解析日期并添加151天。

所以...

var start_number = 699,
    end = 1000,
    steps = 2,
    start_date = '11\11\2018',
    diff = Math.ceil ( (end - start_number) /  steps) ),
    date = new Date(start_date);
date.setDate(date.getDate() + diff);

你有约会的日子... 2019年4月11日

Here's a fiddle