从一个对象数组,如何返回具有最高属性`a`的对象的属性`b`?

时间:2017-08-03 14:43:13

标签: javascript arrays object

我需要从属性b的最高值的对象中获取属性a的值。

var myArr = [
  {
    a: 1,
    b: 15
  },
  {
    a: 2,
    b: 30
  }
];

我尝试了以下操作,但它只返回a的最高值,而不是b

var res = Math.max.apply(Math,myArr.map(function(o){return o.a;});
var blah = getByValue(myArr);

4 个答案:

答案 0 :(得分:8)

使用Array#reduce,并在每次迭代时获取具有最高a值的对象:

var myArr = [{"a":1,"b":15},{"a":2,"b":30}];

var result = myArr.reduce(function(o, o1) {
  return o.a > o1.a ? o : o1;
}).b;

console.log(result);

答案 1 :(得分:1)

可以根据排序方向对副本进行排序,然后获取第一个或最后一个:

var myArr = [
  {
    a: 1,
    b: 15
  },
  {
    a: 2,
    b: 30
  }
];

var highest = myArr.slice().sort((a,b)=>a.a-b.a).pop().b

console.log(highest)

答案 2 :(得分:0)

使用reduce

您可以使用.reduce()查找具有最大a值的元素,然后抓住其b值,如下所示:

var myArr = [{
    a: 1,
    b: 15
  },
  {
    a: 2,
    b: 30
  }
];

var max = myArr.reduce(function(sum, value) {
  return (sum.a > value.a) ? sum : value;
}, myArr[0]);

console.log(max.b);

使用sort

更为非正统的方法是使用.sort()按照其属性a按降序对数组进行排序,然后获取第一个元素的b值,如下所示:< / p>

var myArr = [{
    a: 1,
    b: 15
  },
  {
    a: 2,
    b: 30
  }
];

var max = myArr.sort(function(value1, value2) {
  return value1.a < value2.a;
})[0];

console.log(max.b);

答案 3 :(得分:0)

试试这个:

var myArr = [
    {
        a: 1,
        b: 15
    },
    {
        a: 2,
        b: 30
    }
];

var res = myArr.map(function(o){return o.b;});

myArr.sort(function (o1, o2) {
    return o1.a < o2.a;
})

console.log(myArr[0].b);