提问人:Canovice 提问时间:8/30/2022 更新时间:8/31/2022 访问量:87
在 javascript 中使用 tidy.js,字符串 agg / 在 groupBy 之后的摘要中连接
Using tidy.js in javascript, string agg / concatenate in summarise after groupBy
问:
我们在 javascript 中使用 https://pbeshai.github.io/tidy/ 进行一些数据操作。我们希望在使用 groupby() 后将分组字段的所有字符串连接在 summarise() 中。尝试执行以下操作:
let myArr = [
{ group: 1, field: 'okay' },
{ group: 1, field: 'sir' },
{ group: 2, field: 'yes' },
{ group: 2, field: 'there' },
]
tidy(myArr,
groupBy('group', [
summarise({
allStrings: concat('field', sep=' ')
})
])
)
并获取作为输出:
[
{ group: 1, allStrings: 'okay sir' },
{ group: 2, allStrings: 'yes there' }
]
不幸的是,在摘要器部分的文档中没有看到任何内容。 无效,因为 tidy.js 中没有摘要器函数...这在整洁的.js中可能吗?如果没有,有没有一种简单的方法可以像这样在 javascript 中的组中string_agg/连接字符串?allStrings: concat('field', sep=' ')
concat
答:
1赞
IT goldman
8/30/2022
#1
在这个网站上,有很多按键排列的对象数组,这些对象将项目推入数组/串联/求和/计数/等示例中。但也许有人会发现这很有用。
let myArr = [
{ group: 1, field: 'okay' },
{ group: 1, field: 'sir' },
{ group: 2, field: 'yes' },
{ group: 2, field: 'there' },
]
let obj = myArr.reduce(function(agg, item) {
// do your group by logic below this line
agg[item.group] = agg[item.group] || [];
agg[item.group].push (item.field)
// do your group by logic above this line
return agg
}, {});
// this one also useful to convert to array
let result = Object.entries(obj).map(function ([key, value]) {
return {
group: key,
allStrings: value.join(" ")
}
})
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
1赞
Peter Beshai
8/31/2022
#2
你是对的——tidyjs 中还没有 concat 摘要器,所以你需要手动完成。下面是一个示例,说明如何:
const myArr = [
{ group: 1, field: 'okay' },
{ group: 1, field: 'sir' },
{ group: 2, field: 'yes' },
{ group: 2, field: 'there' },
];
const output = tidy(
myArr,
groupBy('group', [
summarize({
allStrings: (items) => items.map((d) => d.field).join(' '),
}),
])
);
这将产生以下输出:
[
{"group": 1, "allStrings": "okay sir"},
{"group": 2, "allStrings": "yes there"}
]
从本质上讲,您编写一个自定义摘要器,将每个项目映射到您关心的字符串值中,然后用 ' ' 连接这些项目以获得最终的串联字符串。
评论