在 javascript 中使用 tidy.js,字符串 agg / 在 groupBy 之后的摘要中连接

Using tidy.js in javascript, string agg / concatenate in summarise after groupBy

提问人:Canovice 提问时间:8/30/2022 更新时间:8/31/2022 访问量:87

问:

我们在 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

javascript 数据操作 tidy.js

评论


答:

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"}
]

从本质上讲,您编写一个自定义摘要器,将每个项目映射到您关心的字符串值中,然后用 ' ' 连接这些项目以获得最终的串联字符串。