Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 从多维对象数组中查找ID_Javascript_Arrays_Multidimensional Array_Ecmascript 6 - Fatal编程技术网

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