基于另一个包含javascript中键的数组过滤对象数组
我有一个对象数组,如下所示:基于另一个包含javascript中键的数组过滤对象数组,javascript,arrays,filter,javascript-objects,Javascript,Arrays,Filter,Javascript Objects,我有一个对象数组,如下所示: people = [ {id: "1", name: "abc", gender: "m", age:"15" }, {id: "2", name: "a", gender: "m", age:"25" }, {id: "3", name: "efg", gender: "f", age:"5" }, {id: "4", name: "hjk", gender: "m", age:"35" }, {id: "5", name: "ikly", gender: "m"
people = [
{id: "1", name: "abc", gender: "m", age:"15" },
{id: "2", name: "a", gender: "m", age:"25" },
{id: "3", name: "efg", gender: "f", age:"5" },
{id: "4", name: "hjk", gender: "m", age:"35" },
{id: "5", name: "ikly", gender: "m", age:"41" },
{id: "6", name: "ert", gender: "f", age:" 30" },
{id: "7", name: "qwe", gender: "f", age:" 31" },
{id: "8", name: "bdd", gender: "m", age:" 78" },
]
我还有另一个数组,其中包含我想要从对象中获取的值:
filter = ['name','age']
我想筛选人员数组,以返回仅包含该筛选器中的值的对象数组。因此,输出应如下所示:
people = [
{ name: "abc", age:"15" },
{ name: "a", age:"25" },
{ name: "efg", age:"5" },
{ name: "hjk", age:"35" },
{ name: "ikly", age:"41" },
{ name: "ert", age:" 30" },
{ name: "qwe", age:" 31" },
{ name: "bdd", age:" 78" },
]
这与此处的问题类似:一种方法是将
map
与reduce
一起使用:
const result = people.map(item => filter.reduce((acc, cur) => {
acc[cur] = item[cur];
return acc;
}, {}))
您可以映射对象并获取新条目的键
var people=[{id:“1”,姓名:“abc”,性别:“m”,年龄:“15”},{id:“2”,姓名:“a”,性别:“m”,年龄:“25”},{id:“3”,姓名:“efg”,性别:“f”,年龄:“5”},{id:“4”,姓名:“hjk”,性别:“m”,年龄:“35”},{id:“5”,姓名:“ikly”,性别:“m”,年龄:“41”},{id:“6”,姓名:“ert”,性别:“f”,年龄:“30”},{id:“7”,姓名:“我们”,性别:“f”,年龄:“31”},{id:“8”,姓名:“bdd”,性别:“m”,年龄:“78”},
keys=['name','age'],
result=people.map(o=>Object.fromEntries(keys.map(k=>[k,o[k]]));
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
我们可以通过对象创建条目
。条目
,然后通过过滤器
数组使用过滤器
方法过滤对象,然后只需映射对象可以创建的所需元素。fromEntries
:
people = people.map(s => ({ ...Object.fromEntries(Object.entries(s)
.filter(([k, v]) => filter.some(f => f == k)))}));
let people=[
{id:“1”,姓名:“abc”,性别:“m”,年龄:“15”},
{id:“2”,姓名:“a”,性别:“m”,年龄:“25”},
{id:“3”,姓名:“efg”,性别:“f”,年龄:“5”},
{id:“4”,姓名:“hjk”,性别:“m”,年龄:“35”},
{id:“5”,姓名:“ikly”,性别:“m”,年龄:“41”},
{id:“6”,姓名:“ert”,性别:“f”,年龄:“30”},
{id:“7”,姓名:“qwe”,性别:“f”,年龄:“31”},
{id:“8”,姓名:“bdd”,性别:“m”,年龄:“78”},
];
let filter=['name','age'];
people=people.map=>({…Object.fromEntries(Object.entries)
.filter(([k,v])=>filter.some(f=>f==k))});
console.log(人)代码>映射方法可以解决您的问题
const people=[
{id:“1”,姓名:“abc”,性别:“m”,年龄:“15”},
{id:“2”,姓名:“a”,性别:“m”,年龄:“25”},
{id:“3”,姓名:“efg”,性别:“f”,年龄:“5”},
{id:“4”,姓名:“hjk”,性别:“m”,年龄:“35”},
{id:“5”,姓名:“ikly”,性别:“m”,年龄:“41”},
{id:“6”,姓名:“ert”,性别:“f”,年龄:“30”},
{id:“7”,姓名:“qwe”,性别:“f”,年龄:“31”},
{id:“8”,姓名:“bdd”,性别:“m”,年龄:“78”},
];
const result=people.map(person=>{
返回{
姓名:person.name,
年龄:人
}
})
控制台日志(结果)代码>使用映射方法。您还没有使用筛选器数组为什么要使用筛选器数组?因为OPNina中这样说,它将筛选器
数组的名称更改为键
。她确实使用了OP询问者想要的动态过滤。你做了一个硬编码的映射。这就是你的答案不正确的原因