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

时间:2016-01-07 09:36:20

标签: javascript arrays javascript-objects

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

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

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

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

6 个答案:

答案 0 :(得分:1)

我建议使用Array.prototype.reduce()。它返回一个带有数组的最小和最大对象的对象。



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>');
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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);
             

答案 2 :(得分:0)

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;

答案 3 :(得分:0)

首先使用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;

答案 4 :(得分:0)

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

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

O(n)

答案 5 :(得分:-1)

您可以减少数组以查找最大/最小值:

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);