Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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制作“groupBy”_Javascript_Collections_Ecmascript 6_Group By_Lodash - Fatal编程技术网

如何使用本机javascript制作“groupBy”

如何使用本机javascript制作“groupBy”,javascript,collections,ecmascript-6,group-by,lodash,Javascript,Collections,Ecmascript 6,Group By,Lodash,如何使用本机javascript实现groupBy 【分组依据的定义】 创建一个对象,该对象由通过iteratee运行集合的每个元素的结果生成的键组成。分组值的顺序由它们在集合中出现的顺序决定。每个键的对应值是负责生成键的元素数组。使用一个参数(value)调用iteratee 【期望输出】 groupBy([6.1,4.2,6.3],数学地板); // => { '4': [4.2], '6': [6.1, 6.3] } groupBy(['1'、'2'、'3']、'length');

如何使用本机javascript实现
groupBy

【分组依据的定义】 创建一个对象,该对象由通过iteratee运行集合的每个元素的结果生成的键组成。分组值的顺序由它们在集合中出现的顺序决定。每个键的对应值是负责生成键的元素数组。使用一个参数(value)调用iteratee

【期望输出】

groupBy([6.1,4.2,6.3],数学地板);
// => { '4': [4.2], '6': [6.1, 6.3] }

groupBy(['1'、'2'、'3']、'length');
//=>{'3':['1','2'],'5':['3']}

您可以使用对象来收集项目。通过将iteratee应用于项来创建键

iteratee可以是字符串或函数,因此我们需要检查类型,以及是否是从项中提取属性的stringcreate函数

集合可以是数组或对象,我们可以使用来获取数组

constgroupby=(集合,迭代对象=(x)=>x)=>{
const it=typeof iteratee=='function'?
迭代对象:({[iteratee]:prop})=>prop;
常量数组=数组.isArray(集合)?集合:对象.值(集合);
返回数组.reduce((r,e)=>{
常数k=it(e);
r[k]=r[k]| |[];
r[k].推(e);
返回r;
}, {});
};
console.log(groupBy([6.1,4.2,6.3],Math.floor));//=>{ '4': [4.2], '6': [6.1, 6.3] }
log(groupBy(['one','two','three'],'length');//=>{'3':['1','2'],'5':['3']}

log(groupBy({a:6.1,b:4.2,c:6.3},Math.floor));//=>{'4':[4.2],'6':[6.1,6.3]}
您可以使用
reduce
并按键函数公开泛型组

function groupBy(arr, groupByKeyFn )
{
   return arr.reduce( (acc, c) => {
       var key = groupByKeyFn(c);
       acc[key] = acc[key] || [];
       acc[key].push(c)
       return acc;
   }, [])
}
现在您可以将此函数用作

var arr1 = [6.1, 4.2, 6.3];
var arr2 = ['one', 'two', 'three'];

console.log( groupBy(arr1, s => Math.floor(s) ) );
console.log( groupBy(arr2, s => s.length ) );
演示

函数groupBy(arr,groupByKeyFn){
返回arr.reduce((acc,c)=>{
var key=groupByKeyFn(c);
acc[键]=acc[键]| |[];
acc[键]。按下(c)
返回acc;
}, {})
}
var arr1=[6.1,4.2,6.3];
var arr2=['1','2','3'];
log(groupBy(arr1,s=>Math.floor);

log(groupBy(arr2,s=>s.length))那么问题出在哪里?@Sirko我想用原生javascript创建groupBy,而不是来自Lodashy,如果不编写准确的代码,我想这最多需要10行代码:一个循环、一个
if
和一些赋值。