如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?
Posted
技术标签:
【中文标题】如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?【英文标题】:How to get list with of property from array of objects unless it contains another item with certain value? 【发布时间】:2022-01-22 00:09:42 【问题描述】:我有一个对象数组,我需要从该对象数组中获取具有某些属性的列表。但我需要该列表仅包含对象包含具有特定元素的另一个属性的那些值。 这很令人困惑,所以我举了一个例子。 假设我有一个包含对象的数组。
employees = [
n: 'case 1',
date: '2021-05-4',
id: '123',
user: [name: 'Vlad', id: '1', name: 'Misha', id: '2'],
isPresent : true,
,
caseName: 'case 2',
date: '2021-05-4',
id: '124',
user: [name: 'Alina', id: '3', name: 'Alex', id: '4'],
isPresent : true,
,
caseName: 'case 3',
date: '2021-05-4',
id: '126',
user: [],
isPresent : false,
,
]
我的任务是从对象数组中获取IDs
的列表,但我只需要从具有isPresent
和true
的对象中获取ID
。
所以我需要 ['123', '124']。
我可以使用循环和条件等等。但我想知道是否可以用一条线做?像这样的:
employees.filter(item => return item.isPresent === true ))
但我只需要 IDs
而不是整个对象。
【问题讨论】:
但是你只有一个ID为126
的对象,其isPresent
是true
...
感谢您的关注,我现在编辑一下
答案已编辑。看看
【参考方案1】:
1) 您可以过滤条件为item.isPresent === true
的元素,然后对其进行映射以得到最终结果:
employees
.filter((item) => item.isPresent === true)
.map((o) => o.id);
或者你也可以这样做:
employees.filter((item) => item.isPresent).map((o) => o.id)
const employees = [
n: 'case 1',
date: '2021-05-4',
id: '123',
user: [
name: 'Vlad',
id: '1'
,
name: 'Misha',
id: '2'
],
isPresent: true,
,
caseName: 'case 2',
date: '2021-05-4',
id: '124',
user: [
name: 'Alina',
id: '3'
,
name: 'Alex',
id: '4'
],
isPresent: true,
,
caseName: 'case 3',
date: '2021-05-4',
id: '126',
user: [],
isPresent: false,
,
]
const result = employees
.filter((item) => item.isPresent === true)
.map((o) => o.id);
console.log(result);
2) 您也可以使用reduce
获得相同的结果:
employees.reduce((acc, curr) =>
curr.isPresent && acc.push(curr.id);
return acc;
, []);
const employees = [
n: "case 1",
date: "2021-05-4",
id: "123",
user: [
name: "Vlad", id: "1" ,
name: "Misha", id: "2" ,
],
isPresent: true,
,
caseName: "case 2",
date: "2021-05-4",
id: "124",
user: [
name: "Alina", id: "3" ,
name: "Alex", id: "4" ,
],
isPresent: true,
,
caseName: "case 3",
date: "2021-05-4",
id: "126",
user: [],
isPresent: false,
,
];
const result = employees.reduce((acc, curr) =>
curr.isPresent && acc.push(curr.id);
return acc;
, []);
console.log(result);
【讨论】:
【参考方案2】:你可以使用这样的东西
employees.filter((item) => item.isPresent).map((obj) => obj.id);
【讨论】:
以上是关于如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?的主要内容,如果未能解决你的问题,请参考以下文章
Java - 从列表/数组中的每个对象获取单个属性的最简单方法?