Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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_Arrays_Filter_Javascript Objects - Fatal编程技术网

基于另一个包含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询问者想要的动态过滤。你做了一个硬编码的映射。这就是你的答案不正确的原因