Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中按列表项的属性筛选列表_Javascript - Fatal编程技术网

在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'那么你的问题是什么?如何在给定字符串数组作为路径的情况下访问嵌套属性?可能重复