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(…)
来过滤它们?