Javascript过滤数组以从两个范围参数中给出子集
如何过滤数组?给我两个范围重叠所创建的子集 例如,假设我的数组中有一堆对象:Javascript过滤数组以从两个范围参数中给出子集,javascript,arrays,filter,range,subset,Javascript,Arrays,Filter,Range,Subset,如何过滤数组?给我两个范围重叠所创建的子集 例如,假设我的数组中有一堆对象: const list = [{ id: 1, price: "10", weight: "19.45" },{ id: 2, price: "14", weight: "27.8" },{ id: 3, price: "45", weight
const list = [{
id: 1,
price: "10",
weight: "19.45"
},{
id: 2,
price: "14",
weight: "27.8"
},{
id: 3,
price: "45",
weight: "65.7"
},{
id: 4,
price: "37",
weight: "120.5"
},{
id: 5,
price: "65",
weight: "26.9"
},{
id: 6,
price: "120",
weight: "19.3"
},{
id: 7,
price: "20",
weight: "45.7"
}]
现在,我想根据两个参数price
和weight
的范围过滤上述对象数组
let range = {
startPrice: 15,
endPrice: 60,
startWeight: 22.0,
endWeight: 70.5,
}
我想用这些范围参数过滤我的列表,这些参数将返回一个数组,其中包含满足这两个过滤范围的对象子集。因此,输出数组应为:
filtered = [{
id: 3,
price: "45",
weight: "65.7"
},{
id: 7,
price: "20",
weight: "45.7"
}]
因为具有id:3
和id:5
的项目满足这两个范围的子集。我的list.filter()
函数应该是什么样子?非常感谢您的帮助。您是说3和7
此外,您还需要删除引号或强制转换为数字。注意:过滤器期望布尔测试为true或false就足够了。没有,如果需要的话
const list=[{id:1,price:“10”,weight:“19.45”},{id:2,price:“14”,weight:“27.8”},{id:3,price:“45”,weight:“65.7”},{id:4,price:“37”,weight:“120.5,price:“65”,weight:“26.9”},{id:6,price:“120”,weight:“19.3”},{id:7,price:“20”,weight:“45.7”};
让range={startPrice:15,endPrice:60,startWeight:22.0,endWeight:70.5,}
const res=list.filter(项=>
+item.price>=range.startPrice&&
+item.price=range.StartWight&&
+item.weight注意:我使用了parseFloat
,因为值存储为字符串
。从字符串
中获取数字
还有其他方法
var list=[{“id”:1,“价格”:“10”,“重量”:“19.45”},{“id”:2,“价格”:“14”,“重量”:“27.8”},{“id”:3,“价格”:“45”,“重量”:“65.7”},{“id”:4,“价格”:“37”,“重量”:“120.5”},{“id”:5,“价格”:“65”,“重量”:“26.9”},{“id”:6,“价格”:“120”,“重量”:“19.3”{“id”:7,“价格”:“20”,“重量”:“45.7”};
变量范围={
起始价格:15,
最终价格:60,
星期五:22.0,,
最终重量:70.5
};
var filtered=list.filter(
元素=>{
var elementprice=parseFloat(element.price);
var elementweight=parseFloat(element.weight);
如果(
elementprice>=range.startPrice&&
elementprice=range.StartWight&&
ElementWeight您尝试了什么?您认为它应该是什么样子?Filter接受一个函数并应返回true/false。@evolutionxbox是的,但如何返回子集?我正在比较两个参数的子集。我不确定您的意思。Filter的输出返回一个子集。Filter比reduce@mplungjan,你知道吗w什么更有效:filter(item=>(condition1&&condition2&&condition3&&condition4))
,或者filter(item=>condition1)。filter(item=>condition2)。filter(item=>condition3)。filter(item=>condition4)
?比如说,大数组与小数组、内存、速度,还有其他我还没有想到的东西?这对于几百个项目来说并不重要,但为什么要改为筛选?现在你的代码和我的代码一样。这只是一个注释。当筛选使用布尔值时,也不需要使用if。请参阅我的答案,了解最简单的实现