Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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 查看按子数组中的值对数组进行分组_Javascript_Ecmascript 6_Vuejs2 - Fatal编程技术网

Javascript 查看按子数组中的值对数组进行分组

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

试图解析一个数据集,该数据集有一堆相同的“secondaryid”,我可以将它们分组并一起迭代

在英语中,我想做的是 “选择字段值唯一的所有项目的唯一组”

它给出了[“A”],[“B”]

但我要找的是

{
  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;
}, {});