我正在寻找一种按字段对对象数组进行分组的方法。
我在这个答案的评论中找到了一个非常有用的答案(作者:@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/