首页 > 解决方案 > JavaScript,找到对象数组中的最小值

问题描述

我正在使用deckgl 构建自定义视觉效果,这是代码和整个视觉效果

datastudio.google.com/reporting/fe15b7b1-aa4a-4f1b-9b29-52db4734c526

目前,我只是使用第一个元素作为初始视图的参考

var data1 = DEFAULT;
var firstvalue = data1[0].coordinateid.toString();
var coordinates = firstvalue.split(",");
var longitudeView =parseFloat(coordinates[0]);
var latitudeView =parseFloat(coordinates[1]);

这是我正在使用的对象数组的示例

"DEFAULT": [
      {
        "coordinateid": [
          "140,-34.777302"
        ],
        "colorid": [
          "169,255,169"
        ],
        "sizeid": [
          31
        ]
      },
      {
        "coordinateid": [
          "143.4999358,-34.77"
        ],
        "sizeid": [
          150
        ]
      },
      {
        "coordinateid": [
          "143.4999381,-20"
        ],
        "colorid": [
          "169,169,169"
        ],
        "sizeid": [
          1900
        ]
      }
    ]

如何获取字段“coordinateid”的最低值,在此示例中为 [140,-20] 我是 javascript 新手,我确实了解如何访问单个对象值,但不确定如何遍历整个数组,是否有一个函数可以直接访问“Coordinateid”字段的所有值,或者我应该使用循环。

标签: google-data-studiodeck.gl

解决方案


您有 2 个选项:

  1. 更快的循环 - 一个简单的循环,您始终保持迄今为止找到的最低循环:

    let lowest = arr[0];
    for(let i=1; i<0; i++)
    {
        if(arr[i] < lowest) // I used < for the example, enter your comparison logic here
         lowest = arr[i];
    }
    
  2. 效率较低的方法,但可能会在以后的代码中对您有所帮助:使用'Array.sort'方法对数组进行排序:

    array.sort( (el1, el2) => {
      if(el1 > el2) // again- I used > sign, put the actual comparison logic here, i.g: el1.coordinateid[0] > el2.coordinateid[0] and so on
        return -1;
      else return 1;
    });
    

请注意,排序数组的工作方式是这样的:您给它一个回调函数,该函数获取数组的 2 个元素。如果返回 -1,则表示当将它们放回排序数组时,传递的第一个元素应该在第二个元素之前,0 表示它们相等,1 表示传递给函数的第二个元素应该先出现。有关更多说明,请参见sort上面的方法链接。


推荐阅读