繁体   English   中英

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

[英]How to get largest value along with text/name from a dimensional array?

我有一个维度'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未捕获的TypeError:在playerArray上的非对象上调用CreateListFromArrayLike

你可以使用Array.reduce()

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

好又简单的方法:

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)

这里有实例

如果你想要你也可以通过这样做来减少冗长:

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

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

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

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

这里有地图方法的实例

使用索引( 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); 

这是一个非常简单的工作,简单的减少。 我想这个.reduce()是基本的,因为它是我们到处看到的求和数组元素的例子。

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

现在按照这个;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM