Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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 JS通过另一个对象数组过滤对象数组_Javascript_Arrays_Object_Ecmascript 6_Filter - Fatal编程技术网

Javascript JS通过另一个对象数组过滤对象数组

Javascript JS通过另一个对象数组过滤对象数组,javascript,arrays,object,ecmascript-6,filter,Javascript,Arrays,Object,Ecmascript 6,Filter,我有三个对象数组: const names = [ { value: "Time" }, { value: "Angle" }, { value: "Speed" }, { value: "Mass" } ]; const params = [ { name: "Time", value: "s" }, { name: "Time", value: "h" }, { name: "Time", value: "m" }, { name: "Angle", val

我有三个对象数组:

const names = [
  { value: "Time" },
  { value: "Angle" },
  { value: "Speed" },
  { value: "Mass" }
];

const params = [
  { name: "Time", value: "s" },
  { name: "Time", value: "h" },
  { name: "Time", value: "m" },
  { name: "Angle", value: "rad" },
  { name: "Angle", value: "grade" }
];

const selected = [
  { id: 1, name: "Time", param: "s" },
  { id: 2, name: "Time", param: "h" },
  { id: 3, name: "Time", param: "m" },
  { id: 4, name: "Angle", param: "grade" },
  { id: 5, name: "Speed", param: null }
];
我需要一个新的名称数组,其中不包含以下项:

  • 已选择所有可能的参数
  • 如果给定名称没有参数,则只能选择一次
在这种情况下,我的预期输出应该是

    const expected = [
      { value: "Angle" }, 
      { value: "Mass" }
    ]
你可以通过

  • 没有参数为null的值,并且
  • filterd参数和所选项目的长度不相等,且具有长度
const
名称=[{value:“Time”},{value:“Angle”},{value:“Speed”},{value:“Mass”}],
params=[{name:“Time”,value:“s”},{name:“Time”,value:“h”},{name:“Time”,value:“m”},{name:“Angle”,value:“rad”},{name:“Angle”,value:“grade”},
selected=[{id:1,name:“Time”,param:“s”},{id:2,name:“Time”,param:“h”},{id:3,name:“Time”,param:“m”},{id:4,name:“Angle”,param:“grade”},{id:5,name:“Speed”,param:null},
结果=名称。筛选器({value})=>{
常量检查=({name})=>name==value,
pl=参数过滤器(检查).length,
sl=选定。过滤器(检查)。长度;
return!selected.some(o=>o.name==value&&o.param==null)
&&!(pl==sl&pl);
});

控制台日志(结果)
为什么不在所有标记中使用
selected:true | false
标记,然后只使用
Array.prototype.filter(…)
来过滤它们?