javascript - 在 Javascript 中按函数优化分组

标签 javascript arrays group-by

我正在寻找一种按字段对对象数组进行分组的方法。

我在这个答案的评论中找到了一个非常有用的答案(作者:@tomitrescak:https://stackoverflow.com/a/34890276/7652464

function groupByArray(xs, key) { 
return xs.reduce(function (rv, x) { 
    let v = key instanceof Function ? key(x) : x[key]; 
    let el = rv.find((r) => r && r.key === v); 
    if (el) { 
        el.values.push(x); 
    } 
    else { 
        rv.push({ key: v, values: [x] }); 
    } 
    return rv; }, []);

}

可以如下使用

console.log(groupByArray(myArray, 'type'); 

这个函数工作得很好,但是,我的数组包含带有嵌入字段的对象。

我想使用如下功能

console.log(groupByArray(myArray, 'fullmessage.something.somethingelse');

我已经有了一个可以提取嵌入字段的函数。

function fetchFromObject(obj, prop) {

if(typeof obj === 'undefined') {
    return '';
}

var _index = prop.indexOf('.')
if(_index > -1) {
    return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
}

return obj[prop];

}

可以如下使用

var obj = { obj2 = { var1 = 2, var2 = 2}};

console.log(fetchFromObject(obj, 'obj2.var2')); //2

有人可以帮助我将我的功能实现到组功能中吗?

最佳答案

你可以换行

let v = key instanceof Function ? key(x) : x[key];

进入

let v = key instanceof Function ? key(x) : fetchFromObject(x, key);

用于获取任意嵌套键的值。

关于javascript - 在 Javascript 中按函数优化分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44779194/

相关文章:

javascript - 循环是否被视为 "operators"?

c++ - 数组和指针

arrays - Swift - 向字典内的数组添加值

python - 分组后计算数据框中某些值的数量

javascript - 基于谷歌地图的浏览器基准测试?

javascript - 指针事件为 null 的元素上的“单击”(或替代方法)

Pandas 使用具有多个参数的函数进行聚合

c# - linq Group By 并获取第一个和最后一个记录

javascript - 如何判断 IE8 窗口何时失去焦点?

c - 尝试打印 char 数组中特定索引中的 char