在javascript中按列表项的属性筛选列表
我可以通过以下方式过滤纯列表:在javascript中按列表项的属性筛选列表,javascript,Javascript,我可以通过以下方式过滤纯列表: var list = [1, 2, 3, 4, 5, 1, 3] function list_filter(list, value) { return list.filter(function (item) { if (item === value) { return true } }) } console.log(list_filter(list, 1)) // there will print `[1, 1]`
var list = [1, 2, 3, 4, 5, 1, 3]
function list_filter(list, value) {
return list.filter(function (item) {
if (item === value) {
return true
}
})
}
console.log(list_filter(list, 1)) // there will print `[1, 1]`
但我对过滤器有一个进一步的要求,如以下所示:
var a = [
{a:'1', b:"2", c:3, d: {id:'d1'}},
{a:'1', b:"2", c:3, d: {id:'d2'}},
{a:'1', b:"2", c:3, d: {id:'d1'}},
{a:'1', b:"2", c:3, d: {id:'d3'}},
{a:'1', b:"2", c:3, d: {id:'d3'}},
{a:'1', b:"2", c:3, d: {id:'d4'}}
]
我想按item.d.id筛选列表
我想列出如下所示的过滤器:
function list_filter(list, 'd.id', value) ... // the value is the filter id
或:
我是说
list_filter(a, ['d', 'id'], 'd1')
以获取筛选的列表。['d','id']可能是['d','e','id']或更长。您可以使用本机方法并为。。。通过您的路径的循环数:
让数据=[
{a:'1',b:2,c:3,d:{id:'d1'},
{a:'1',b:2,c:3,d:{id:'d2'},
{a:'1',b:2,c:3,d:{id:'d1'},
{a:'1',b:2,c:3,d:{id:'d3'},
{a:'1',b:2,c:3,d:{id:'d3'},
{a:'1',b:2,c:3,d:{id:'d4'}
];
常量列表_过滤器=arr,path,val=>{
返回arr.filtere=>{
设场=e;
forlet currentPath of path字段=字段[currentPath];
返回字段==val;
};
};
console.loglist_filterdata,['d','id','d1' 您可以使用内部带有reduce的.filter来标识目标值:
变量a=[{a:'1',b:2,c:3,d:{id:'d1'},{a:'1',b:2,c:3,d:{id:'d2'},{a:'1',b:2,c:3,d:{id:'d1'},{a:'1',b:2,c:3,d:{id:'d3'},{d:'d:'id:'d3''d3'},{;
const list_filter=arr,keyArr,value=>
arr.filterobj=>
value===keyArr.reducecrorbj,key=>currObj[key],obj
;
console.loglist_filtera,['d','id'],'d3' 我主张使用接受函数的签名从每个项中选择值的方法,而不是传递由.-分隔的键字符串或键数组,如下所示:
function list_filter(list, 'd.id', value) ... // the value is the filter id
常数a=[
{a:'1',b:'2',c:3,d:{id:'d1'},
{a:'1',b:'2',c:3,d:{id:'d2'},
{a:'1',b:'2',c:3,d:{id:'d1'},
{a:'1',b:'2',c:3,d:{id:'d3'},
{a:'1',b:'2',c:3,d:{id:'d3'},
{a:'1',b:'2',c:3,d:{id:'d4'}
]
函数过滤器\列表数组、选择器、值{
返回数组.filter
项目=>selectoritem===值
}
console.logfilter_lista,o=>o.d.id,“d1”
//或
console.logfilter_lista,{d:{id}}=>id,'d1'那么你的问题是什么?如何在给定字符串数组作为路径的情况下访问嵌套属性?可能重复