比较存储在数组中的对象的属性

Compare properties of objects stored in array

我有一个 JavaScript 这种格式的数组:

var dimensions = [
{dim: 590, token:'...'}, 
{dim: 800, token:'.....'}, 
{dim: 2500, token:'........'}
];

dimensions 数组中的数据是动态填充的,即我不知道它是零个、一个还是 50 个具有 dimtoken 属性的对象。

我需要从具有最大值 dim 和最小值 dim 的对象中选取 token。有人知道我该怎么做吗?

var dimensions = [
{dim: 590, token:'...'}, 
{dim: 800, token:'.....'}, 
{dim: 2500, token:'........'}
];

// Sort the function in ascending order and pick the first and the last element.
var minmax = dimensions.sort(function(a,b){
                  return a.dim - b.dim;
             }).filter(function(el, i){
                 return i==0 || i==dimensions.length-1;
             });

// minmax will have two values, first will be minimum and second will be the largest.
console.log("Smallest: "+minmax[0].token);
console.log("Largest: "+minmax[1].token);
             

sort dimensions数组先升序再取最小和最大的token

dimensions.sort(function(a, b) {
  return parseInt(a.dim) - parseInt(b.dim);
});

var smallest = dimensions[ 0 ].token;
var largest = dimensions[ dimensions.length - 1 ].token;

您可以减少数组以找到 max/min:

var result = dimensions.reduce(function(r, item) {
    r.max = !r.max || r.max.dim < item.dim ? item : r.max;
    r.min = !r.min || r.min.dim > item.dim ? item : r.min;
    return r;
}, {});

console.log(result.max.token);
console.log(result.min.token);

先使用sort函数sort array,然后从数组中选取firstlast元素。

dimensions.sort(function(a,b)
{
  return a.dim - b.dim
});

var tokenOfSmallest = dimensions[0].token;
var tokenOfLargest = dimensions[dimensions.length - 1].token;

我建议使用Array.prototype.reduce()。它 returns 具有数组的最小和最大对象的对象。

var dimensions = [
        { dim: 590, token: '...' },
        { dim: 800, token: '.....' },
        { dim: 2500, token: '........' }
    ],
    result = dimensions.reduce(function (r, a) {
        r.min = r.min || a;
        r.max = r.max || a;
        return { 
            min: r.min.dim < a.dim ? r.min : a, 
            max: r.max.dim > a.dim ? r.max : a
        };
    }, {});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

虽然此处提供的大多数答案都是正确的,但它们并不是解决您问题的最佳解决方案(Nina Scholz 除外)。

通过 Array.sort() 对数组进行排序需要 Big-O 的 O(n*log(n)) 复杂度,但是您的问题肯定可以通过更快的 O(n) 算法来解决。

    var dimensions = [
      {dim: 590, token:'...'}, 
      {dim: 800, token:'.....'}, 
      {dim: 2500, token:'........'}
    ];

    function getTokenForLargestDim(array) 
    {

      if(array.length === 0) { throw new Error('Empty array'); }

      var maxDim = Number.NEGATIVE_INFINITY;
      var maxIndex = -1;

      for(var i=0; i < array.length; i++) {
          var lastDim = maxDim;

          if(dimensions[i].dim > maxDim) { maxDim = dimensions[i].dim; maxIndex = i;}
      }

      return array[maxIndex].token;

    }

    getTokenForLargestDim(dimensions);