如何从维数组中获取最大值以及文本/名称?

时间:2017-01-24 00:46:46

标签: javascript arrays

我有一个维度'dataArray',如下所示。

dataArray = [ {name:"Apples", score: 3.5}, {name:"Oranges", score: 3.7}, {name:"Grapes", score: 4.1} ];

想获得dataArray的最高分以及名称吗?

function playerArray() {

  dataArray = [{
    name: "Apples",
    score: 3.5
  }, {
    name: "Oranges",
    score: 3.7
  }, {
    name: "Grapes",
    score: 4.1
  }];

  for (i = 0; i < dataArray.length; i++) {
    var nameArray = dataArray[0].name;
    var scoreArray = dataArray[0].score;

    var largest = Math.max.apply(Math, scoreArray);

    alert(largest[0].score);
  }
}

执行'playerArray()'时会抛出以下错误: test.html:24 Uncaught TypeError:在非对象上调用CreateListFromArrayLike     在playerArray

4 个答案:

答案 0 :(得分:1)

您可以使用Array.reduce()

&#13;
&#13;
let dataArray = [ {name:"Apples", score: 3.5}, {name:"Oranges", score: 3.7}, {name:"Grapes", score: 4.1} ];

let max = dataArray.reduce((acc,elem) => { return elem.score > acc.score ? elem : acc }, {name: "", score: -1});

console.log(max);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

美好而简单的方式:

dataArray = [ {name:"Apples", score: 3.5}, {name:"Oranges", score: 3.7}, {name:"Grapes", score: 4.1} ];

var maxScore = {name:'',score:0};

for(var i = 0; i< dataArray.length; i++){
  var currElem = dataArray[i];
  var currScore = currElem.score;

  //keep track of highest score so far
  if(maxScore.score < currScore){
     maxScore.name = currElem.name;
     maxScore.score = currElem.score;
  }

}

console.log(maxScore)

Live example here

如果你愿意,也可以通过以下方式减少冗长:

 if(maxScore.score < currScore){
     maxScore = currElem;
  }

如果你想要更优雅并避免循环加上一些变量,那么使用map

var maxScore = {name:'',score:0};

dataArray.map(function(elem) {
  if (maxScore.score < elem.score) {
    maxScore = elem
  }
});

Live example of map approach here

答案 2 :(得分:0)

使用索引(maxIndex)进行搜索:

dataArray = [{
  name: "Apples",
  score: 3.5
}, {
  name: "Oranges",
  score: 3.7
}, {
  name: "Grapes",
  score: 4.1
}];

var maxIndex = 0;
for (i = 1; i < dataArray.length; i++) {
  if(dataArray[maxIndex].score < dataArray[i].score)
    maxIndex = i;
}

var maxObj = dataArray[maxIndex];

console.log(maxObj);

答案 3 :(得分:0)

这是一个非常简单的工作,简单的减少。我想这种.reduce()的使用与我们在任何地方看到的求和数组元素一样重要。

arraySum = arr.reduce((p,c) => p+c)

现在按照这个;

&#13;
&#13;
var data = [ {name:"Apples", score: 3.5}, {name:"Oranges", score: 3.7}, {name:"Grapes", score: 4.1} ],
 dataMax = data.reduce((p,c) => p.score > c.score ? p : c);
console.log(dataMax);
&#13;
&#13;
&#13;