Javascript 如何按数组/对象值的倍数筛选对象数组
我需要过滤一组对象,如下所示:Javascript 如何按数组/对象值的倍数筛选对象数组,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我需要过滤一组对象,如下所示: var models = [ { "family": "Applique", "power":"8", "volt":"12", "color":"4100", "type":"E27", "ip":"20", "dimensions":"230x92" }, { "family": "Lanterne", "power":"20",
var models = [
{
"family": "Applique",
"power":"8",
"volt":"12",
"color":"4100",
"type":"E27",
"ip":"20",
"dimensions":"230x92"
},
{
"family": "Lanterne",
"power":"20",
"volt":"230",
"color":"2700",
"type":"R7S",
"ip":"44",
"dimensions":"230x92"
},
{
"family": "Applique",
"power":"50",
"volt":"230",
"color":"",
"type":"GU10",
"ip":"20",
"dimensions":"227x227"
}
]
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
"power":{
"less":[
"30"
],
"greater":[
],
"equal":[
]
},
"volt":[
"12", "230"
],
"color":[
],
"type":[
],
"ip":[
"20"
]
"dimensions":[
],
}
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
...
"volt":[
"12", "230"
],
...
}
基于这样一个对象:
var models = [
{
"family": "Applique",
"power":"8",
"volt":"12",
"color":"4100",
"type":"E27",
"ip":"20",
"dimensions":"230x92"
},
{
"family": "Lanterne",
"power":"20",
"volt":"230",
"color":"2700",
"type":"R7S",
"ip":"44",
"dimensions":"230x92"
},
{
"family": "Applique",
"power":"50",
"volt":"230",
"color":"",
"type":"GU10",
"ip":"20",
"dimensions":"227x227"
}
]
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
"power":{
"less":[
"30"
],
"greater":[
],
"equal":[
]
},
"volt":[
"12", "230"
],
"color":[
],
"type":[
],
"ip":[
"20"
]
"dimensions":[
],
}
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
...
"volt":[
"12", "230"
],
...
}
因此,在这种情况下,结果可能是:
{
"family": "Applique",
"power":"8",
"volt":"12",
"color":"4100",
"type":"E27",
"ip":"20",
"dimensions":"230x92"
}
我已经阅读了另一个链接:,但我似乎无法使其适应我的情况
提前谢谢
编辑:现在不请求“电源”属性的条件
编辑2:抱歉,我忘记指出筛选器对象可以为单个属性具有多个值,如下所示:
var models = [
{
"family": "Applique",
"power":"8",
"volt":"12",
"color":"4100",
"type":"E27",
"ip":"20",
"dimensions":"230x92"
},
{
"family": "Lanterne",
"power":"20",
"volt":"230",
"color":"2700",
"type":"R7S",
"ip":"44",
"dimensions":"230x92"
},
{
"family": "Applique",
"power":"50",
"volt":"230",
"color":"",
"type":"GU10",
"ip":"20",
"dimensions":"227x227"
}
]
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
"power":{
"less":[
"30"
],
"greater":[
],
"equal":[
]
},
"volt":[
"12", "230"
],
"color":[
],
"type":[
],
"ip":[
"20"
]
"dimensions":[
],
}
var filter = {
"family":[
"Applique", "Faretto", "Lanterne"
],
...
"volt":[
"12", "230"
],
...
}
试试看
对于过滤大于/小于,他们给出了以下示例:
\uu.filter(用户,符合({'age':\uu.partial(\ugt,\u38)})
使用Array.filter
、Array.indexOf
和对象的解决方案。键
功能:
var result = models.filter(function(obj){
var matched = true;
Object.keys(obj).forEach(function(k){
if (k === "power") { // The condition on "power" property is not requested now
return false;
}
if (filter[k] && filter[k].length && filter[k].indexOf(obj[k]) === -1) {
matched = false;
}
});
return matched;
});
console.log(JSON.stringify(result, 0, 4));
console.log
输出:
[
{
"family": "Applique",
"power": "8",
"volt": "12",
"color": "4100",
"type": "E27",
"ip": "20",
"dimensions": "230x92"
}
]
添加到目前为止您尝试的代码。非常感谢您的回复,但我忘了提到一些细节,请查看我文章中的第二次编辑。再次感谢你!这正是我需要的!非常感谢!:)