gpt4 book ai didi

javascript - 如何使用 javascript 按数组分组并确定总行数

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:11 24 4
gpt4 key购买 nike

所以在 sql 中,一个常见的事情是一个带有 group by 的 select 语句,然后是一个 having count =1 或者你有什么。

select bID from tableA groubBy bID having count(*) = 1

本质上,我希望使用 typescript 来执行上述操作。

我也想在没有任何额外插件的情况下做到这一点,所以我真的很想在 javascript 中做到这一点。基于我所做的一些谷歌搜索以及访问 SO,我发现 .reduce 函数或多或少是我所需要的(据我所知)

问题是我到这里来,得到的只是编译错误或转换错误。说它有隐式类型 any 或没有回调函数 .. 等等...

我想做的是传入一个数组。按值对它们进行分组。然后看看他们有多少人。如果计数等于 1,则为每个满足该条件的属性设置一个等于 true 的属性,然后退出该方法。

这是我从网上得到的。

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;
}, []);
}

附言。不管出于什么原因,人们喜欢在这里使用非常短的变量名,这让我很困惑。我不知道 xs 或 rv 是什么或意味着什么,也不知道该变量内部是什么,所以如果你能帮助解释我粘贴的代码,那可能就是我所需要的。

再次感谢。

PPS。一个快速的数据示例是

[{bID:1,isDeleted:false},{bID:1,isDeleted:true},{bID:2,isDeleted:false},{bID:1,isDeleted:true},{bID:3,isDeleted :false},{bID:3,isDeleted:false},{bID:4,isDeleted:false}]

所以应该返回的是[{bId:1,isDeleted:false}{bID:2,isDeleted:false},{bID:4,isDeleted:false}]

下面是我可以开始工作的代码示例。

 var test = this.user2.scc.sA.reduce((a, b) => (a.Bid== b.Bid && !a.isDeleted) ? a : b);

编辑:快速编辑,对于造成的困惑,我深表歉意。但是我写的语法是 Typescript。我知道 typescript 是 javascript 但在我最初的问题中我提到了 javascript 因为我想避免弄乱原型(prototype)因为这种方法不是最佳实践。

最佳答案

您可以只按值排序并删除所有连续出现两次的值,而不是之后进行分组和过滤:

 function unique(array, key) {
return array
.sort((a, b) => a[key] > b[key] ? 1 : -1)
.filter((el, index) =>
(index < 1 || el[key] !== array[index - 1][key]) &&
(index >= array.length - 1 || el[key] !== array[index + 1][key])
);
}

可以用作:

 unique([{bID:1},{bID:1},{bID:2},{bID:1},{bID:3},{bID:3},{bID:4}], "bID")

关于javascript - 如何使用 javascript 按数组分组并确定总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52728868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com