提取Math.max中的元素

时间:2013-11-29 10:09:14

标签: javascript

我想知道是否有办法提取我传递给Math.max函数的元素。

var maxi = Math.max(document.getElementById('textBox1').value,
document.getElementById('textBox2').value,
document.getElementById('textBox3').value,
document.getElementById('textBox4').value,
document.getElementById('textBox5').value);

我不仅要获得数字,还要获取元素,例如,如果10是与document.getElementById('textBox1').value提取该元素相关联的最大数字。

3 个答案:

答案 0 :(得分:1)

如果您不需要Math.max()

var elements = [document.getElementById('textBox1'),
              document.getElementById('textBox2'),
              document.getElementById('textBox3'),
              document.getElementById('textBox4'),
              document.getElementById('textBox5')];
var maxIndex = -1;
var maxVal = -Infinity;
for (var i=0; i<elements.length; i++) {
    if (elements[i].value > maxVal) {
        maxVal = elements[i].value;
        maxElement = elements[i];
    }
}

循环结束后,maxVal将具有最大值,maxElement将成为关联的DOM元素。

答案 1 :(得分:1)

您可以定义自己的方法,而不是像{/ p>这样的Math.max方法

function myMaxElement = function() {
  var elementWithMaxValue = null,
      maxValue = -Infinity;

  for (var  i = 0; i < arguments.length; i++) {
      if (arguments[i].value >= maxValue) {
         maxValue = arguments[i].value;
         elementWithMaxValue = arguments[i];
      }
  }

  return elementWithMaxValue;

}

现在用这样的所有参数调用此方法

var maxElement = myMaxElement(document.getElementById('textBox1'),
                        document.getElementById('textBox2'),
                        document.getElementById('textBox3'),
                        document.getElementById('textBox4'),
                        document.getElementById('textBox5'));

console.log(maxElement);

PS:我在运行时写了这段代码,所以可能是那里的类型。我使用了参数,它是一个类似于数组的对象,并在所有方法中都被接收。 MDN documentation for arguments

答案 2 :(得分:0)

如果您将x.y作为参数传递给函数,则不会传递有关x的任何信息。要避免此问题,您需要传递x和从x访问y的方法。一个例子可能是这个:

function myMax(f) {
  var maxEl = arguments[1];
  var maxVal = f(maxEl);


  for (var i=1; i<arguments.length; i++) {
    if (maxVal < f(arguments[i])) {
      maxEl = arguments[i];
      maxVal = f(maxEl);
    }
  }
  return { element : maxEl, value: maxVal }
}

// usage
var res = myMax(function(el) { return +el.value; }, 
                document.getElementById('textBox1'), 
                document.getElementById('textBox2'), 
                document.getElementById('textBox3'), 
                document.getElementById('textBox4'), 
                document.getElementById('textBox5'));

console.log('Max Element : ', res.element, ' with value : ', res.value);