在Javascript中,如何在满足某些条件的情况下在具有最高值的特定属性的数组中查找对象

在Javascript中,如何在满足某些条件的情况下在具有最高值的特定属性的数组中查找对象,javascript,arrays,sorting,oop,object,Javascript,Arrays,Sorting,Oop,Object,有一个名为householdArray的数组,其中填充了具有两个属性的对象:第一个属性是isSelling,其值为true或false。第二个是askingPrice,它的值是一个数字。还有另一个名为buyer的对象,它有一个带有数值的budget属性 在householdArray中所有具有isSelling===true的对象中,我如何找到买家预算中的询问价格最高的对象 你可以通过过滤掉那些isSelling===true,askingPrice是的对象来找到你要找的东西。你可以通过过滤掉那

有一个名为
householdArray
的数组,其中填充了具有两个属性的对象:第一个属性是
isSelling
,其值为
true
false
。第二个是
askingPrice
,它的值是一个数字。还有另一个名为
buyer
的对象,它有一个带有数值的
budget
属性


householdArray
中所有具有
isSelling===true
的对象中,我如何找到
买家
预算中的
询问价格最高的对象

你可以通过过滤掉那些isSelling===true,askingPrice是的对象来找到你要找的东西。你可以通过过滤掉那些isSelling==true,askingPrice是的对象来找到你要找的东西。你可以使用过滤器和min-max,但我只需一次完成这项工作,用O(n)利用
Array.prototype.reduce()
节省时间。为了鼓励您使用箭头函数,我将首先向您展示箭头,然后展示常规函数实现

请注意,我们使用像
{isSelling:true,askingPrice:0}
这样的对象作为reduce操作的初始值

var买方={预算:1000},
家庭=[{IsSalling:对,
询问价格:500},
{isSelling:错,
询问价格:500},
{Issell:是的,
询问价格:1000},
{Issell:是的,
询问价格:790},
{isSelling:错,
询问价格:1000},
{Issell:是的,
询问价格:1200},
{isSelling:错,
询问价格:690},
{Issell:是的,
询问价格:890},
{Issell:是的,
askingPrice:1500},
{Issell:是的,
询问价格:790},
{Issell:是的,
询问价格:900},
{Issell:是的,
询问价格:990},
{isSelling:错,
询问价格:990},
{Issell:是的,
询问价格:670}
],
结果=家庭。减少((p,c)=>c.isSelling==true&&
c、 askingPrice p.askingPrice?c:p,{isSelling:true,askingPrice:0});

控制台日志(结果)您可以使用过滤器和最小-最大值,但我只需使用
Array.prototype.reduce()
在O(n)时间内一次性完成这项工作。为了鼓励您使用箭头函数,我将首先向您展示箭头,然后展示常规函数实现

请注意,我们使用像
{isSelling:true,askingPrice:0}
这样的对象作为reduce操作的初始值

var买方={预算:1000},
家庭=[{IsSalling:对,
询问价格:500},
{isSelling:错,
询问价格:500},
{Issell:是的,
询问价格:1000},
{Issell:是的,
询问价格:790},
{isSelling:错,
询问价格:1000},
{Issell:是的,
询问价格:1200},
{isSelling:错,
询问价格:690},
{Issell:是的,
询问价格:890},
{Issell:是的,
询问价格:1500},
{Issell:是的,
询问价格:790},
{Issell:是的,
询问价格:900},
{Issell:是的,
询问价格:990},
{isSelling:错,
询问价格:990},
{Issell:是的,
询问价格:670}
],
结果=家庭。减少((p,c)=>c.isSelling==true&&
c、 askingPrice p.askingPrice?c:p,{isSelling:true,askingPrice:0});

控制台日志(结果)这称为过滤和排序

var买方={预算:1000};
var Househouse=[{isSelling:true,
询问价格:500},
{isSelling:错,
询问价格:500},
{Issell:是的,
询问价格:1000},
{Issell:是的,
询问价格:790},
{isSelling:错,
询问价格:1000},
{Issell:是的,
询问价格:1200},
{isSelling:错,
询问价格:690},
{Issell:是的,
询问价格:890},
{Issell:是的,
询问价格:1500},
{Issell:是的,
询问价格:790},
{Issell:是的,
询问价格:900},
{Issell:是的,
询问价格:990},
{isSelling:错,
询问价格:990},
{Issell:是的,
询问价格:670}
];
功能预算过滤器(obj){
if(obj.isSelling==true&&obj.askingPrice b.askingPrice){
返回-1;
}
//a必须等于b
返回0;
});
log('filteredarray\n',result[0]);

//console.log('filteredarray\n',result);显示排序数组
这称为筛选和排序

var买方={预算:1000};
var Househouse=[{isSelling:true,
询问价格:500},
{isSelling:错,
询问价格:500},
{Issell:是的,
询问价格:1000},
{Issell:是的,
询问价格:790},
{isSelling:错,
询问价格:1000},
{Issell:是的,
询问价格:1200},
var buyer= {"budget": 700};

var householdArray = [{"isSelling": true, "askingPrice": 100}, {"isSelling": false, "askingPrice": 800}, {"isSelling": true, "askingPrice": 500}, {"isSelling": true, "askingPrice": 600}];

var qualifiedBudgets = householdArray.filter(x => x.isSelling && x.askingPrice <= buyer.budget);

//use map to get array of numbers representing the asking prices
var selectedArray = householdArray.find(f => f.askingPrice === Math.max.apply(null, qualifiedBudgets.map(x => x.askingPrice)));

//value should be the array with asking price of 600
console.log(selectedArray);
var selectedArray= householdArray.find(f => f.askingPrice === Math.max.apply(null, householdArray.filter(x => x.isSelling && x.askingPrice <= buyer.budget).map(x => x.askingPrice)));