Javascript 使用可变参数筛选对象
我需要使用Javascript 使用可变参数筛选对象,javascript,function,object,filter,arguments,Javascript,Function,Object,Filter,Arguments,我需要使用getProduct函数过滤我的products数组,该函数接受可变参数列表。 参数可以是产品的名称和/或minPrice、maxPrice和/或型号中的价格 let products = [ { "name": "Lenovo", "price": "18000", "model": "v580c" }, { "name": "Apple", "price": "30000", "model": "Iphone 6" }, {
getProduct
函数过滤我的products
数组,该函数接受可变参数列表。
参数可以是产品的名称和/或minPrice、maxPrice和/或型号中的价格
let products = [
{
"name": "Lenovo",
"price": "18000",
"model": "v580c"
},
{
"name": "Apple",
"price": "30000",
"model": "Iphone 6"
},
{
"name": "Nikon",
"price": "25000",
"model": "G290"
}]
函数getProduct(productName、minPrice、maxPrice、productModel){
返回产品。过滤器(产品=>{
返回product.priceminPrice&&product.name==productName;
});
}
log(getProduct(“Apple”,35403000000));
log(getProduct(“联想”,35403000000,“v580c”);
您可以发送一个参数数组作为参数,并编写相应的逻辑来处理它们
示例:
函数getProduct(数组、参数){
var list=array.filter(函数(o){
返回参数每个(功能)(千伏){
if(o.hasOwnProperty(千伏键)){
var cur=o[kv.键];
开关(千伏运行){
案例“>”:返回电流>千伏值
案例“”},
{key:“price”,值:40000,操作:“如果不需要搜索多个项目,可以使用具有特殊结构的对象进行搜索。此方案使用具有此结构的对象进行过滤:
function getProduct(productName, minPrice, maxPrice, productModel) {
return products.filter(product => {
return product.price < maxPrice && product.price > minPrice && product.name == productName;
});
}
console.log(getProduct("Apple", 3540, 3000000000));
console.log(getProduct("Lenovo", 3540, 3000000000, "v580c"));
该算法在search
中查找每个属性,如果所有比较都为真,则将元素添加到结果集中
函数过滤器(数组、搜索){
返回数组.filter(函数(a){
返回Object.keys(搜索).every(函数(k){
返回(
a[k]==搜索[k]||
搜索类型[k]==='object'&&(
('min'在搜索[k])&&('max'在搜索[k])&&search[k]。min为什么我没有想到min
和max
+1只是一个建议,因为您已经生成了一个真正通用的代码,请选中search[k]=='object'
的最小值/最大值看起来不正确。你可以改为检查键。@Rajesh,这只是一个开放API的想法。它取决于用途,需要哪些参数,这是一个建议,而不是最终产品(一如既往:-)@Rajesh,in
只对对象起作用。如果没有对象,you getUncaught TypeError:无法使用'in'运算符搜索…in…
。很抱歉,但这是我第一次认为,我应该使用我的代码。min
和max
添加了很多条件。为单独的查询条件添加单独的对象将增加很多条件eep API简单,使查询更具可配置性。但这只是我的观点。可能有一些事情我可能错过了,因此得出了这个结论,但我想失败和错误有助于我们学习。:-)周末愉快。
{
name: 'Apple',
price: {
min: 3540, // both or a single border is possible
max: 60000
},
model: function (s) { return s.match(/s/); } // just search for a single letter
}