Javascript 从多维对象数组中查找ID
我有一个多维对象数组:Javascript 从多维对象数组中查找ID,javascript,arrays,multidimensional-array,ecmascript-6,Javascript,Arrays,Multidimensional Array,Ecmascript 6,我有一个多维对象数组: var products = [ { id: 1, groups: [ { id: 1.1, selected: true }, { id: 1.2, selected: false }}, { id: 2, groups: [ { id: 2.1, selected: false }, { id: 2.2, selected: true }} ]; 如何使用ES6在一维数组中查找选定组的列表(selected flag设置为true的组) 预期结果: [1.1,
var products = [
{ id: 1, groups: [ { id: 1.1, selected: true }, { id: 1.2, selected: false }},
{ id: 2, groups: [ { id: 2.1, selected: false }, { id: 2.2, selected: true }} ];
如何使用ES6在一维数组中查找选定组的列表(selected flag设置为true的组)
预期结果:
[1.1, 2.2]
您可以像下面这样使用reduce和filter,这将为您提供所有选择了
的ID:true
。请注意,我将id:1.2更改为true,以演示获得多个true结果的能力
const产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:true}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const res=products.reduce((a,{groups})=>
a、 concat(…groups.filter(({selected})=>selected.map(({id})=>id))
, []);
控制台日志(res)
您可以像下面那样使用reduce和filter,这将为您提供所有选择了的ID:true
。请注意,我将id:1.2更改为true,以演示获得多个true结果的能力
const产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:true}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const res=products.reduce((a,{groups})=>
a、 concat(…groups.filter(({selected})=>selected.map(({id})=>id))
, []);
控制台日志(res)代码>
var产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
var desiredResult=products.map(product=>{
return product.groups.filter(group=>group.selected).map(item=>item.id).toString();
});
console.log(desiredResult)代码>
var产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
var desiredResult=products.map(product=>{
return product.groups.filter(group=>group.selected).map(item=>item.id).toString();
});
console.log(desiredResult)
您可以使用reduce
方法并在一个或多个forEach
循环中获取所选为true
的组对象
var产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const result=products.reduce((r,{groups})=>{
groups.forEach(e=>e.selected&r.push(e.id));
返回r;
}, [])
console.log(result)
您可以使用reduce
方法并在另一个forEach
循环中获取选中的组对象true
var产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const result=products.reduce((r,{groups})=>{
groups.forEach(e=>e.selected&r.push(e.id));
返回r;
}, [])
console.log(result)
所有其他答案的可能替代方案
展平阵列,然后提取所需信息
const产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const allIds=[].concat(…products.map(p=>p.groups)).filter(g=>g.selected).map(x=>x.id)
console.log(allIds)
所有其他答案的可能替代方案
展平阵列,然后提取所需信息
const产品=[
{id:1,组:[{id:1.1,selected:true},{id:1.2,selected:false}]},
{id:2,组:[{id:2.1,selected:false},{id:2.2,selected:true}]};
const allIds=[].concat(…products.map(p=>p.groups)).filter(g=>g.selected).map(x=>x.id)
console.log(allIds)
您可以使用map
、filter
和concat
函数获得结果
var products = [
{ id: 1, groups: [ { id: 1.1, selected: true }, { id: 1.3, selected: true },{ id: 1.2, selected: false }]},
{ id: 2, groups: [ { id: 2.1, selected: false }, { id: 2.2, selected: true }]} ];
const selectgroups = [].concat(...products.map(x => x.groups.filter(g=> g.selected)));
const selectedGroupIds = selectgroups.map(g=> g.id);
console.log(selectedGroupIds);
提供所有选定组列表的代码
您可以使用map
、filter
和concat
函数获得结果
var products = [
{ id: 1, groups: [ { id: 1.1, selected: true }, { id: 1.3, selected: true },{ id: 1.2, selected: false }]},
{ id: 2, groups: [ { id: 2.1, selected: false }, { id: 2.2, selected: true }]} ];
const selectgroups = [].concat(...products.map(x => x.groups.filter(g=> g.selected)));
const selectedGroupIds = selectgroups.map(g=> g.id);
console.log(selectedGroupIds);
提供所有选定组列表的代码
我看到了一种完全不同的方法:使用专门的数据结构以您希望的方式对数据进行建模:
//映射到一组
//组ID
const productGroupMap=新映射([
[1,新设置([1.1,1.2]),
[2,新设置([2.1,2.2])]
] )
//将组ID存储到其数据中
const groupMap=新映射([
[1.1,{标题:“标题1.1}],
[1.2,{标题:“标题1.2}],
[2.1,{标题:“标题2.1}],
[2.2,{标题:“标题2.2”}]
] )
//在您的应用程序中的某个地方,您可以声明
//一组选定的组ID,您可以添加ID
//当用户选择给定的组时
const selectedGroups=新集合()
selectedGroups.add(1.1)
selectedGroups.add(2.2)
//最后,当您需要这些选定的组时,您只需要
//将选定的组ID映射到其组数据(从
//群组地图
const groups=[…selectedGroups].map(id=>groupMap.get(id))
console.log(groups)
我看到了一种完全不同的方法:使用专门的数据结构以您希望的方式对数据建模:
//映射到一组
//组ID
const productGroupMap=新映射([
[1,新设置([1.1,1.2]),
[2,新设置([2.1,2.2])]
] )
//将组ID存储到其数据中
const groupMap=新映射([
[1.1,{标题:“标题1.1}],
[1.2,{标题:“标题1.2}],
[2.1,{标题:“标题2.1}],
[2.2,{标题:“标题2.2”}]
] )
//在您的应用程序中的某个地方,您可以声明
//一组选定的组ID,您可以添加ID
//当用户选择给定的组时
const selectedGroups=新集合()
selectedGroups.add