Javascript 以两个不同大小数组的笛卡尔乘积为例
我不知道该怎么做。我可能需要组合两个阵列:Javascript 以两个不同大小数组的笛卡尔乘积为例,javascript,arrays,Javascript,Arrays,我不知道该怎么做。我可能需要组合两个阵列: const users = [ { user: 'user_1', }, { user: 'user_2', }, { user: 'user_3', }, { user: 'user_4', }, ] 及 组合后,结果应如下所示: const result = [ { user: 'user_1', label:
const users = [
{
user: 'user_1',
},
{
user: 'user_2',
},
{
user: 'user_3',
},
{
user: 'user_4',
},
]
及
组合后,结果应如下所示:
const result = [
{ user: 'user_1', label: 'label_1' },
{ user: 'user_1', label: 'label_2' },
{ user: 'user_2', label: 'label_1' },
{ user: 'user_2', label: 'label_2' },
{ user: 'user_3', label: 'label_1' },
{ user: 'user_3', label: 'label_2' },
{ user: 'user_4', label: 'label_1' },
{ user: 'user_4', label: 'label_2' },
]
但是,用户
看起来也可能是这样:
const users = [
{
user: 'user_1',
},
]
和标签
:
const labels = [
{
label: 'label_1',
},
{
label: 'label_2',
},
{
label: 'label_3',
},
{
label: 'label_4',
},
]
然而,结果应该是这样的:
const result = [
{ user: 'user_1', label: 'label_1' },
{ user: 'user_1', label: 'label_2' },
{ user: 'user_1', label: 'label_3' },
{ user: 'user_1', label: 'label_4' },
]
如果这真的很琐碎,请原谅,我们已经关注这一点有一段时间了。只需使用嵌套循环:
const result=[];
for(用户的常量{user}){
for(标签的常量{label}){
push({user,label});
}
}
控制台日志(结果);
或者,在不分解和合并对象的所有属性的情况下:
const result=[];
for(const user of users){
用于(标签的常量标签){
push({…user,…label});
}
}
控制台日志(结果);
只需使用嵌套循环:
const result=[];
for(用户的常量{user}){
for(标签的常量{label}){
push({user,label});
}
}
控制台日志(结果);
或者,在不分解和合并对象的所有属性的情况下:
const result=[];
for(const user of users){
用于(标签的常量标签){
push({…user,…label});
}
}
控制台日志(结果);
我建议您了解javascript的功能特性
users.map(e=>labels.map(g=>({…e,…g})).flat()
它遍历两个列表,创建一个合并对象,然后由于labels.map返回一个数组,我们将其展平(例如与原始数组合并)我建议您了解javascript的功能特性
users.map(e=>labels.map(g=>({…e,…g})).flat()
它遍历两个列表,创建一个合并的对象,然后由于labels.map返回一个数组,我们将其展平(例如与原始数组合并)看起来,您需要给定数组的一部分
对于这种方法,可以使用一个返回数组乘积的函数。对于另一个数组,可以在函数调用中轻松添加新参数
const
笛卡尔=(…数组)=>array.reduce((a,b)=>a.reduce((r,v)=>r.concat(b.map(w=>({…v,…w})),[]),
users=[{user:'user_1'},{user:'user_2'},{user:'user_3'},{user:'user_4'}],
labels=[{label:'label_1'},{label:'label_2'}],
结果=笛卡尔(用户、标签);
控制台日志(结果)代码>
.as控制台包装{max height:100%!important;top:0;}
看起来,您需要一个给定数组的名称
对于这种方法,可以使用一个返回数组乘积的函数。对于另一个数组,可以在函数调用中轻松添加新参数
const
笛卡尔=(…数组)=>array.reduce((a,b)=>a.reduce((r,v)=>r.concat(b.map(w=>({…v,…w})),[]),
users=[{user:'user_1'},{user:'user_2'},{user:'user_3'},{user:'user_4'}],
labels=[{label:'label_1'},{label:'label_2'}],
结果=笛卡尔(用户、标签);
控制台日志(结果)代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}
const result = [
{ user: 'user_1', label: 'label_1' },
{ user: 'user_1', label: 'label_2' },
{ user: 'user_1', label: 'label_3' },
{ user: 'user_1', label: 'label_4' },
]