【问题标题】:Find min, max in array with objects在包含对象的数组中查找最小值,最大值
【发布时间】:2015-03-15 10:08:06
【问题描述】:

我有这个数组,里面有对象:

var pts = [
    { "X": 52.67528921580262,  "Y": 8.373513221740723 },
    { "X": 52.6759657545252,   "Y": 8.374114036560059 },
    { "X": 52.682574466310314, "Y": 8.37256908416748  },
    { "X": 52.68356308524067,  "Y": 8.373942375183105 },
    { "X": 52.68293869694087,  "Y": 8.375487327575684 },
    { "X": 52.67685044320001,  "Y": 8.376259803771973 },
    { "X": 52.6756535071859,   "Y": 8.379607200622559 },
    { "X": 52.676017795531436, "Y": 8.382096290588379 },
    { "X": 52.68101344348877,  "Y": 8.380722999572754 },
    { "X": 52.68351105322329,  "Y": 8.383641242980957 },
    { "X": 52.68,              "Y": 8.389             }
];

如何找到 X 的 min,max 和 Y 的 min,max ?

【问题讨论】:

  • 您是否尝试过遍历数组,并将值与 {x/y} {min/max} 的四个变量进行比较?如果您尝试过,这种方法的哪一部分会给您带来问题?
  • 将第一个对象 x 和 y 值存储为 x 和 y 的最小值和最大值。然后循环遍历其余的对象。对于每个对象,将对象 x 和 y 与 x 和 y 的最小值和最大值进行比较。如果您为 x 或 y 找到了新的最小值或最大值,请用它替换旧的。

标签: javascript arrays object max min


【解决方案1】:

您可以调用Math.minMath.max,传入一个仅包含相关值的映射数组,如下所示:

function endProp( mathFunc, array, property ) {
    return Math[ mathFunc ].apply(array, array.map(function ( item ) {
        return item[ property ];
    }));
}

var maxY = endProp( "max", pts, "Y" ), // 8.389
    minY = endProp( "min", pts, "Y" ); // 8.37256908416748

【讨论】:

    【解决方案2】:

    对数组进行排序可能是最简单的。

    array.sort(function minXToMaxX(a,b){
       return a.x - b.x;
    });
    

    最低x 值为array[0]。最高的x 值为array[array.length - 1]

    【讨论】:

      【解决方案3】:

      此代码运行良好。请参阅演示片段。

      var pts = [{
        "X": 52.67528921580262,
        "Y": 8.373513221740723
      }, {
        "X": 52.6759657545252,
        "Y": 8.374114036560059
      }, {
        "X": 52.682574466310314,
        "Y": 8.37256908416748
      }, {
        "X": 52.68356308524067,
        "Y": 8.373942375183105
      }, {
        "X": 52.68293869694087,
        "Y": 8.375487327575684
      }, {
        "X": 52.67685044320001,
        "Y": 8.376259803771973
      }, {
        "X": 52.6756535071859,
        "Y": 8.379607200622559
      }, {
        "X": 52.676017795531436,
        "Y": 8.382096290588379
      }, {
        "X": 52.68101344348877,
        "Y": 8.380722999572754
      }, {
        "X": 52.68351105322329,
        "Y": 8.383641242980957
      }, {
        "X": 52.68,
        "Y": 8.389
      }];
      var xobj = [];
      var yobj = [];
      var len = pts.length;
      
      for (var i = 0; i < len; i++) {
      
        xobj.push(parseFloat(pts[i].X));
        yobj.push(parseFloat(pts[i].Y));
      }
      
      //height x value
      var value = xobj[0];
      for (var n = 1; n < xobj.length; n++) {
        if (xobj[n] > value) {
          value = xobj[n];
        }
      }
      
      //lowest x value
      var valuel = xobj[0];
      for (var n = 1; n < xobj.length; n++) {
        if (xobj[n] < valuel) {
          valuel = xobj[n];
        }
      }
      
      //height y value
      var valueY = yobj[0];
      for (var n = 1; n < yobj.length; n++) {
        if (yobj[n] > valueY) {
          valueY = yobj[n];
        }
      }
      
      //lowest x value
      var valuelY = yobj[0];
      for (var n = 1; n < yobj.length; n++) {
        if (yobj[n] < valuelY) {
          valuelY = yobj[n];
        }
      }
      
      document.getElementById("demo").innerHTML = valuel
      
      document.getElementById("demo1").innerHTML = value
      
      document.getElementById("demo2").innerHTML = valuelY
      
      document.getElementById("demo3").innerHTML = valueY
      Minx:
      <p id="demo"></p>
      MaxX:
      <p id="demo1"></p>
      Miny:
      <p id="demo2"></p>
      MaxY:
      <p id="demo3"></p>

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 2018-01-09
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 2021-12-28
        • 2021-09-15
        • 2019-04-22
        相关资源
        最近更新 更多