繁体   English   中英

根据包含 javascript 中的键的另一个数组过滤对象数组

[英]filtering an array of objects based on another array containing keys in javascript

我有一个对象数组,如下所示:

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" },
 ]

我还有另一个数组,其中包含我想要的 object 的值:

filter = ['name','age']

我想过滤人员数组以返回一个对象数组,该数组仅包含该过滤器中的值。 所以 Output 应该是这样的:

    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" },
 ]

这类似于这里的问题: filtering an array of objects based on another array in javascript

您可以 map object 并获取新条目的密钥。

 var 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" }], keys = ['name', 'age'], result = people.map(o => Object.fromEntries(keys.map(k => [k, o[k]]))); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

一种方法是将mapreduce一起使用:

const result = people.map(item => filter.reduce((acc, cur) => {
  acc[cur] = item[cur];
  return acc;
}, {}))

We can create entries by Object.entries , then filter our object by filter array using filter method and then just map desired elements which can be created by Object.fromEntries :

people = people.map(s => ({ ...Object.fromEntries(Object.entries(s)
    .filter(([k, v]) => filter.some(f => f == k)))}));

 let 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" }, ]; let filter = ['name','age']; people = people.map(s => ({...Object.fromEntries(Object.entries(s).filter(([k, v]) => filter.some(f => f ==k)))})); console.log(people);

Map 方法可以解决您的问题。

 const 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" }, ]; const result = people.map(person => { return { name: person.name, age: person.age } }) console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM