嗨,我一直在练习关于归约方法的挑战,以真正理解它,但这个话题让我困惑了.

const orders = [
    {  livingId: 996, cash: 30500.35, tax: 0.06, isDisputed: true},
    {  livingId: 910, cash: 100, tax: 0.08, isDisputed: true },
    {  livingId: 912, cash: 4200.11, tax: 0.06 },
    {  livingId: 996, cash: 99.12, tax: 0.06, isDisputed: false },
    {  livingId: 910, cash: 0.00, tax: 0.08, isShipped: true },
    {  livingId: 996, cash: 10, tax: 0.06, isDisputed: true },
];

const result = orders.reduce(
    (arr, current) => {
        const numOrders = arr.numOrders + 1;
        const uniqueId = [...new Set([current.livingId])] //returns [996]
        console.log("arr.uniqueId= "+ arr.uniqueId)
        console.log("current.livingId= "+ current.livingId)  
        console.log("current.livingId  + arr.uniqueId= "+ uniqueId)
 return {
            numOrders,
            uniqueId,
        };
    },
    {
        numOrders: 0, 
        uniqueId: 0,
    },
);

console.log(result)

如何从livingID返回唯一id值的总计数?再加上我目前获得总订单的方法.

预期结果: 订单数:6 LivingID:3

我try 了控制台日志(log)记录多个方法,如Filter、Includes,发现最干净的是新的set方法,但它只返回livingId的最后一个可迭代数组,返回[996].返回的.long肯定是%1而不是%3. 我也try 过这个方法,但它返回了所有值.

const uniqueId = [...new Set([arr.uniqueId, current.livingId])] // 0,996,910,912,996,910,996

推荐答案

如果你想用reduce来做到这一点:

const orders=[{livingId:996,cash:30500.35,tax:.06,isDisputed:!0},{livingId:910,cash:100,tax:.08,isDisputed:!0},{livingId:912,cash:4200.11,tax:.06},{livingId:996,cash:99.12,tax:.06,isDisputed:!1},{livingId:910,cash:0,tax:.08,isShipped:!0},{livingId:996,cash:10,tax:.06,isDisputed:!0}];

const ids = orders.reduce((set, c) => {
  set.add(c.livingId);
  return set;
}, new Set());

console.log(ids.size);

或者:map除以数组以获得ID数组,将该数组添加到集合中,然后获得其size.

const orders = [
  {  livingId: 996, cash: 30500.35, tax: 0.06, isDisputed: true},
  {  livingId: 910, cash: 100, tax: 0.08, isDisputed: true },
  {  livingId: 912, cash: 4200.11, tax: 0.06 },
  {  livingId: 996, cash: 99.12, tax: 0.06, isDisputed: false },
  {  livingId: 910, cash: 0.00, tax: 0.08, isShipped: true },
  {  livingId: 996, cash: 10, tax: 0.06, isDisputed: true }
];

const idsLen = new Set(orders.map(order => order.livingId)).size;

console.log(idsLen);

Javascript相关问答推荐

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

如何将多维数组插入到另一个多维数组中?

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

使用带有HostBinding的Angular 信号来更新样式?

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

使用类型:assets资源 /资源&时,webpack的配置对象&无效

如何用javascript更改元素的宽度和高度?

在D3条形图中对具有相同X值的多条记录进行分组

用于部分字符串的JavaScript数组搜索

将相关数据组合到两个不同的数组中

更改agGRID/Reaction中的单元格格式

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

在执行console.log(new X())时记录一个字符串

用内嵌的含selenium的Java脚本抓取网站

如何限制调整最小高度并转换为纯Java脚本

从添加的袋子中删除产品在Redux-Toolkit中不起作用

通过webContent发送数据时的空对象.发送

为什么它不记录任何东西在控制台?

onmouseover事件在Edge浏览器中突然不起作用