[英]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
变量中,然后尝试将Number
与object
进行比较。
解:
您应该只在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.