我有一个维度'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
答案 0 :(得分:1)
您可以使用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);
&#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)
如果你愿意,也可以通过以下方式减少冗长:
if(maxScore.score < currScore){
maxScore = currElem;
}
如果你想要更优雅并避免循环加上一些变量,那么使用map
:
var maxScore = {name:'',score:0};
dataArray.map(function(elem) {
if (maxScore.score < elem.score) {
maxScore = elem
}
});
答案 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)
现在按照这个;
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;