Javascript 查看按子数组中的值对数组进行分组
试图解析一个数据集,该数据集有一堆相同的“secondaryid”,我可以将它们分组并一起迭代 在英语中,我想做的是 “选择字段值唯一的所有项目的唯一组” 它给出了[“A”],[“B”] 但我要找的是Javascript 查看按子数组中的值对数组进行分组,javascript,ecmascript-6,vuejs2,Javascript,Ecmascript 6,Vuejs2,试图解析一个数据集,该数据集有一堆相同的“secondaryid”,我可以将它们分组并一起迭代 在英语中,我想做的是 “选择字段值唯一的所有项目的唯一组” 它给出了[“A”],[“B”] 但我要找的是 { A: [ "SD","MM" ], B: [ "FI","CO" ], } 我可以做一些像 const map = {}; data.forEach( d => { if( map[d.Group] ) { map[d.Group].push(d.Nam
{
A: [ "SD","MM" ],
B: [ "FI","CO" ],
}
我可以做一些像
const map = {};
data.forEach( d => {
if( map[d.Group] ) {
map[d.Group].push(d.Name);
} else {
map[d.Group] = [d.Name];
}
})
console.log(map)
您还可以
将数组缩小为分组对象(由组
值键入):
const数据=[{
组:"A",,
名称:“SD”
}, {
B组:,
姓名:“FI”
}, {
组:"A",,
姓名:“嗯”
}, {
B组:,
姓名:'CO'
}];
const Group=data.reduce((a,{Group,Name})=>{
如果(!(a中的组))a[组]=[名称];
else a[Group].push(名称);
返回a;
}, {});
控制台日志(分组)
为此,我将使用array.reduce
而不是array.map
,因为您实际上希望返回的是一个新值,而不是一个修改过的数组,当您希望将数组实际减少为单个输出值时,reduce方法是完美的,在您的情况下,它是一个具有唯一组的对象。也许可以试试这样:
let unique = data.reduce((acc, { Group, Name }) => {
if (!(acc.hasOwnProperty(Group))) {
acc[Group] = [Name];
} else {
acc[Group].push(Name);
};
return acc;
}, {});
我还为此在添加了一支笔:这样您就可以看到它正在工作
希望这有帮助 我认为最简单的方法是使用Array.prototype.reduce
方法创建一个对象,将唯一的组
名称映射到包含名称
的数组。您可以提供一个空对象文字作为初始reduce
累加器:
const数据=[{
组:"A",,
名称:“SD”
}, {
B组:,
姓名:“FI”
}, {
组:"A",,
姓名:“嗯”
}, {
B组:,
姓名:'CO'
}];
var namesByGroup=data.reduce((映射,el)=>{
map[el.Group]?map[el.Group].push(el.Name):map[el.Group]=[el.Name];
返回图;
}, {});
console.log(namesByGroup)代码>如果您对函数式方法感兴趣,这里有一个使用Ramda的解决方案:
const组=
右管(
R.groupBy(R.prop('Group')),
R.map(R.map(R.prop('Name')));
console.log(
团体([
{组:'A',名称:'SD'},
{组:'B',名称:'FI'},
{组:'A',名称:'MM'},
{组:'B',名称:'CO'}])
);代码>
也可以使用forEach完成
const数据=[{
组:"A",,
名称:“SD”
}, {
B组:,
姓名:“FI”
}, {
组:"A",,
姓名:“嗯”
}, {
B组:,
姓名:'CO'
}];
常量somefunction=(数据)=>{
设arr={}
data.forEach(({Group,Name})=>{
arr中的组?arr[Group]。推送(名称):arr[Group]=[Name]
})
返回arr;
}
console.log(somefunction(data))
let unique = data.reduce((acc, { Group, Name }) => {
if (!(acc.hasOwnProperty(Group))) {
acc[Group] = [Name];
} else {
acc[Group].push(Name);
};
return acc;
}, {});