繁体   English   中英

从数组中获取价格最高的对象

[英]Get object from array with largest price

嗨,如何使用javascript获取价格最高的对象:

我有此代码,但效果不佳

var array = [{Name: "blue",Price: 20},{Name: "red",Price: 10},{Name: "green",Price: 30}];
var biggestNumber = 0;
for (var i = 0; i < array.length; i++){
    var item = array[i]
  if(biggestNumber < item.Price) {
    biggestNumber = item;
  }
}
console.log(biggestNumber);
let highestPrice = Math.max.apply(null, array.map(e => e.Price));
let item = array.find(e => e.Price === highestPrice);

 var array = [{Name: "blue",Price: 20},{Name: "red",Price: 10},{Name: "green",Price: 30}]; var maxIndex = 0; // assume the max is at 0 for(var i = 1; i < array.length; i++) { // for the rest of the objects in the array if(array[i].Price > array[maxIndex].Price) // if the current object is bigger than the assumed max maxIndex = i; // then this current object's index is the new maxIndex } var maxObject = array[maxIndex]; // max object is the object at maxIndex console.log(maxObject); 

您可以使用Array.prototype.reduce将整个数组“缩小”为一个值:价格最大的对象。

var itemWithHighestPrice = array.reduce(function(highest, item, index) {
    if (index === 0 || item.Price > highest.Price) {
        return item;
    }
    return highest;
}, {});

您必须将item.Price存储在maximumNumber中,而不是仅存储item中。

var array = [{Name: "blue",Price: 20},{Name: "red",Price: 10},{Name: "green",Price: 30}];
var biggestNumber = 0;
for (var i = 0; i < array.length; i++){
    var item = array[i]
  if(biggestNumber < item.Price) {
    biggestNumber = item.Price;
  }
}
console.log(biggestNumber);

经典的方法与for声明

该建议将第一个元素作为临时结果,并使用结果检查数组的所有后续对象。 如果找到更大的Price ,则result更改为实际元素。

 var array = [{ Name: "blue", Price: 20 }, { Name: "red", Price: 10 }, { Name: "green", Price: 30 }], result = array[0], // take the first element i; for (i = 1; i < array.length; i++) { // iterate from the second on if (array[i].Price > result.Price) { // check price, if a greater price found result = array[i]; // replace result with actual object } } console.log(result); 

或者您可以使用Array#reduce并在回调内部返回检查结果。

 var array = [{ Name: "blue", Price: 20 }, { Name: "red", Price: 10 }, { Name: "green", Price: 30 }], result = array.reduce(function (a, b) { return a.Price > b.Price ? a : b; }, {}); console.log(result); 

与ES6相同

 var array = [{ Name: "blue", Price: 20 }, { Name: "red", Price: 10 }, { Name: "green", Price: 30 }], result = array.reduce((a, b) => a.Price > b.Price ? a : b, {}); console.log(result); 

 var array = [{Name: "blue",Price: 20},{Name: "red",Price: 10},{Name: "green",Price: 30}]; var biggestNumber = {Price:0}; array.forEach(function(obj){ if(obj.Price>biggestNumber.Price) biggestNumber=obj; }); console.log(biggestNumber); 

问题:

您的问题是,您将整个item对象存储在highestPrice变量中,然后尝试将Numberobject进行比较。

解:

您应该只在item.Price Price变量中存储highestPrice并比较Price值,如下所示编辑代码:

var biggestNumber = 0;
for (var i = 0; i < array.length; i++) {
  var item = array[i];
  if (biggestNumber < item.Price) {
    biggestNumber = item.Price;
  }
}

工作片段:

 var array = [{ Name: "blue", Price: 20 }, { Name: "red", Price: 10 }, { Name: "green", Price: 30 }]; var biggestNumber = 0; for (var i = 0; i < array.length; i++) { var item = array[i]; if (biggestNumber < item.Price) { biggestNumber = item.Price; } } console.log(biggestNumber); 

注意:

如果希望将整个item作为结果,则只需比较两个对象的Price属性,就可以像这样更新第一个代码:

for (var i = 0; i < array.length; i++){
    var item = array[i]
  if(biggestNumber.Price < item.Price) {
    biggestNumber = item;
  }
}

暂无
暂无

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

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