找到阵列中2个neighboor之间的最小数字

时间:2017-09-05 17:38:35

标签: javascript arrays foreach

我想要为一个函数,最好是在forEach中,为每个被2或更高或相等的数字放弃的元素,或者它的第一个或最后一个元素,与第二个或倒数第二个数字进行比较。

我想出了这个代码,但我确信有更好的方法:

var Pointdata = [98,59,39,0,48,85,19,43,3,98,65,100];

    Pointdata.forEach(function(Current,i,array){

  if (Current <= array[i+1] && Current <= array[i-1]) {
  DrawPoint(Current,i,array);
  }
  else if (Current <= array[i+1] && i == 0) {
  DrawPoint(Current,i,array);
  }
  else if(Current <= array[i-1] && i+1 == array.length) {
  DrawPoint(Current,i,array);
  }

function DrawPoint(Current,i,array) { 
// marks peak points of canavas chart.
}

3 个答案:

答案 0 :(得分:1)

你可以在里面使用一个条件,Currenta

if ((i + 1 === array.length || a <= array[i + 1]) && (i === 0 || a <= array[i - 1])) {
    DrawPoint(a, i, array);
}

答案 1 :(得分:0)

这个怎么样?

for (i = 1; i < array.length - 1; i++) {
  var Current = array[i];

  if (Current <= array[i+1] && Current <= array[i-1]) {
   DrawPoint(Current,i,array);
  }
}

一些好处:

  1. 您可以跳过开始和结束索引等边缘情况
  2. 只有一个条件可以考虑
  3. 但是如果你想保留这些边缘情况,你可以将它们全部写在一起,如果用if ((Current <= array[i+1] && Current <= array[i-1]) || (Current <= array[i+1] && i == 0) || (Current <= array[i-1] && i+1 == array.length))

    之类的条件分隔它们

答案 2 :(得分:0)

function markPeaks(data, draw) {
  var xs = [Infinity].concat(data).concat(Infinity)
  xs.forEach(function(x, i, array) {
    if (Number.isFinite(x)) // skip first and last
      if (array[i-1] >= x && x <= array[i+1]) // n-1 ≥ n ≤ n+1
        draw(x, i-1, array) // minus1 because of 1st 'helper' Infinity
  })
}

markPeaks(/*pointdata, /*drawpoint*/)