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。请参阅我的答案,了解最简单的实现