首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Javascript中按相关值对Json进行分组

在Javascript中按相关值对Json进行分组
EN

Stack Overflow用户
提问于 2020-05-10 05:55:52
回答 2查看 65关注 0票数 0

这个JSON是以订单的形式提供的,其中包含多个与vendorId相关的产品。我希望能够将其分组到一个独立的数组集合中,而不是将所有产品都作为一个长集合列出。我如何才能做到这一点?

我的代码

代码语言:javascript
运行
AI代码解释
复制
    let order =     {
        "products": [
            {
                "_id": "5e989346731e4d11c4a06331",
                "productId": "5e9ee6ad8ac51f4654846552",
                "vendorId": "5e8547fb14033339a86cc349",
                "name": "Laterral",
                "price": 1000,
                "count": 2

            },
            {
                "_id": "5e990589823c501e640be183",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc349",
                "name": "ANother Product",
                "price": 12453,
                "count": 3

            },
            {
                "_id": "5e9ee6ad8ac51f4654846552",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc309",
                "name": "ANother Product",
                "price": 12453,
                "count": 3
            },
            {
                "_id": "5e9904c3cd559006fc2b92b3",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc309",
                "name": "ANother Product",
                "price": 12453,
                "count": 3
            }
        ],
        "address":"Colonel 10",
        "amount":"234555",
        "transaction_id":"3334hdd",
        "status":"Not processed"
    }

    let products = order.products
    //console.log(products)
     arr = []
    products.map(product => {
      vendorId = product.vendorId
      price = product.price
      quantity = product.count
      productId = product.productId

      if(vendorId == product.vendorId) {
        arr.vendorId = vendorId
        arr.productId = productId
        arr.price = price
        arr.count = quantity
        arr.total = price * quantity; //arr.reduce((cum, xtr) => cum + xtr.price * xtr.count,0)
        tem = "========= \n " +arr.count+" Products ordered from this vendor " + vendorId + "\n"  + arr.productId +" for "+ arr.price + " Total of " + arr.total;

      }

      console.log(arr)
    })

This is my output

    [
      vendorId: '5e8547fb14033339a86cc349',
      productId: '5e9ee6ad8ac51f4654846552',
      price: 1000,
      count: 2,
      total: 2000
    ]
    [
      vendorId: '5e8547fb14033339a86cc349',
      productId: '5e989346731e4d11c4a06331',
      price: 12453,
      count: 3,
      total: 37359
    ]
    [
      vendorId: '5e8547fb14033339a86cc309',
      productId: '5e989346731e4d11c4a06331',
      price: 12453,
      count: 3,
      total: 37359
    ]
    [
      vendorId: '5e8547fb14033339a86cc309',
      productId: '5e989346731e4d11c4a06331',
      price: 12453,
      count: 3,
      total: 37359
    ]

This is my intended output

    "order":{
   "vendor":[
      {
         "productId":"5e9ee6ad8ac51f4654846552",
         "price":1000,
         "count":2,
         "total":2000
      },
      {
         "productId":"5e989346731e4d11c4a06331",
         "price":12453,
         "count":3,
         "total":37359
      }
   ],
   "vendorId":"5e8547fb14033339a86cc349",
   "gtotal":39359,
"vendor":[
   {
      "productId":"5e989346731e4d11c4a06331",
      "price":12453,
      "count":3,
      "total":37359
   },
   {
      "productId":"5e989346731e4d11c4a06331",
      "price":12453,
      "count":3,
      "total":37359
   }
],
"vendorId":"5e8547fb14033339a86cc309",
"gtotal":74718}

解决这个问题的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-10 06:47:27

这不会产生所需的输出,因为所需的输出是完全无效的

但这几乎就是我想要的

代码语言:javascript
运行
AI代码解释
复制
let order={"products":[{"_id":"5e989346731e4d11c4a06331","productId":"5e9ee6ad8ac51f4654846552","vendorId":"5e8547fb14033339a86cc349","name":"Laterral","price":1000,"count":2},{"_id":"5e990589823c501e640be183","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc349","name":"ANother Product","price":12453,"count":3},{"_id":"5e9ee6ad8ac51f4654846552","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc309","name":"ANother Product","price":12453,"count":3},{"_id":"5e9904c3cd559006fc2b92b3","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc309","name":"ANother Product","price":12453,"count":3}],"address":"Colonel 10","amount":"234555","transaction_id":"3334hdd","status":"Not processed"};
const products = order.products;


const vendor = products.reduce((acc, {productId, price, count, vendorId}) => {
    let total = price * count;
    let existing_vendor = acc.find(i => i.vendorId === vendorId);
    if (!existing_vendor) {
        acc.push({products:[{productId, price, count, total}], vendorId, gtotal:total});
    } else {
        existing_vendor.products.push({productId, price, count, total});
        existing_vendor.gtotal += total;
    }
    return acc
}, []);

const result = {order: {vendor}};
console.log(result);

票数 0
EN

Stack Overflow用户

发布于 2020-05-10 07:01:06

根据我从您的问题和所需的输出json中所理解的,我觉得这可能适合您期望的输出json结构。

代码语言:javascript
运行
AI代码解释
复制
const orders = {
        "products": [
            {
                "_id": "5e989346731e4d11c4a06331",
                "productId": "5e9ee6ad8ac51f4654846552",
                "vendorId": "5e8547fb14033339a86cc349",
                "name": "Laterral",
                "price": 1000,
                "count": 2

            },
            {
                "_id": "5e990589823c501e640be183",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc349",
                "name": "ANother Product",
                "price": 12453,
                "count": 3

            },
            {
                "_id": "5e9ee6ad8ac51f4654846552",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc309",
                "name": "ANother Product",
                "price": 12453,
                "count": 3
            },
            {
                "_id": "5e9904c3cd559006fc2b92b3",
                "productId": "5e989346731e4d11c4a06331",
                "vendorId": "5e8547fb14033339a86cc309",
                "name": "ANother Product",
                "price": 12453,
                "count": 3
            }
        ],
        "address":"Colonel 10",
        "amount":"234555",
        "transaction_id":"3334hdd",
        "status":"Not processed"
    }

const formattedProducts = orders.products.reduce((result, product) => {
  const vendorObj = result.find(r => r.vendor.vendorId === product.vendorId);
  if(vendorObj) {
    vendorObj.vendor.products.push(product);
    vendorObj.vendor.total += product.price
  } else {
    result.push({"vendor": {products: [product], vendorId: product.vendorId, total: product.price}})
  }

return result
}, [])

const result = {orders:[...formattedProducts]}

console.log(result)

在最终输出中,在供应商数组中,每个产品都具有与输入中相同的信息。如果不需要所有的值,则可以删除它们。但只是为了保持他们在那里,我没有删除或没有添加,只有那些你正在寻找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61707790

复制
相关文章
JS/TS 对数组中的对象按相同值进行分组
举个例子:对以下数组按 lastName 的值进行分组分类 const listData = [ { firstName: "Rick", lastName: "Sanchez", size: 18 }, { firstName: "Morty", lastName: "Smith", size: 6 }, { firstName: "Jerry", lastName: "Smith", size: 3 }, { firstName: "Beth", lastName: "Smith", s
Leophen
2020/10/09
8.6K0
JS/TS 对数组中的对象按相同值进行分组
JavaScript 如何对 JSON 数据进行冒泡排序?
JavaScript 是一种广泛使用的脚本语言,提供了丰富的功能和工具,用于处理和操作数据。JSON(JavaScript Object Notation)是一种常见的数据格式,用于在不同应用程序之间传输和存储数据。在本文中,我们将探讨如何使用 JavaScript 对 JSON 数据进行冒泡排序,以实现按照指定字段排序的功能。
海拥
2023/06/23
4670
JavaScript 按值传递 & 按引用传递
其次,对象的比较并非值的比较:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。     即使两个对象包含同样的属性和相同的值,它们也是不相等的。各个索引元素完全相等的两个数组也不相等
书童小二
2018/09/03
3.9K0
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
6K0
JSON 在JavaScript 中的使用。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
愷龍
2022/10/06
10.7K0
根据分组依据对Java集合元素进行分组
业务背景:在项目中有个“分账”功能,就是支付的钱一部分要根据不同商品的分账金额自动分给平台提供商。
张张
2019/12/25
2.6K0
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.6K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。
石瞳禅
2018/09/18
1.8K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRP
李海彬
2018/03/28
3.1K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
在 JavaScript 中对数组进行排序
排序是您在学习JavaScript时将使用的众多基本方法之一。让我们回顾一下如何对不同的数据类型使用排序方法。
腾龙
2022/06/02
5.1K0
Json概述以及python对json的相关操作
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
bear_fish
2018/09/20
6430
Json概述以及python对json的相关操作
如何对矩阵中的所有值进行比较?
需求相对比较明确,就是在矩阵中显示的值,需要进行整体比较,而不是单个字段值直接进行的比较。如图1所示,确认矩阵中最大值或者最小值。
逍遥之
2020/05/14
8.3K0
使用 Python 按行和按列对矩阵进行排序
假设我们采用了一个输入的 MxM 矩阵。我们现在将使用嵌套的 for 循环对给定的输入矩阵进行逐行和按列排序。
很酷的站长
2023/02/22
6.6K0
使用 Python 按行和按列对矩阵进行排序
Java中的按值传递
这个时候可能会有疑问了,为什么add方法可以修改List数组,但是append和addNum却没有修改传进来的值
俺也想起舞
2019/07/24
1.9K0
在springboot中对kafka进行读写操作
只需要在dependencies中增加 spring-kafka的配置即可。完整效果如下:
冬天里的懒猫
2020/08/03
3.2K0
在 Python 中对服装图像进行分类
图像分类是一种机器学习任务,涉及识别图像中的对象或场景。这是一项具有挑战性的任务,但它在面部识别、物体检测和医学图像分析等现实世界中有许多应用。
很酷的站长
2023/08/11
7721
在 Python 中对服装图像进行分类
Python对字典根据键值分组进行排序
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119530.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
4.7K0
JS/TS 对数组中的对象按对象的值进行去重
举个例子:对以下数组按 lastName 的值进行去重 let listData = [ { firstName: "Rick", lastName: "Sanchez", size: 18 }, { firstName: "Morty", lastName: "Smith", size: 6 }, { firstName: "Jerry", lastName: "Smith", size: 3 }, { firstName: "Beth", lastName: "Smith", size:
Leophen
2020/10/09
7.4K0
JS/TS 对数组中的对象按对象的值进行去重
Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递的例子:
java达人
2018/01/31
1.2K0
Java中只有按值传递,没有按引用传递!
sql对多个条件进行分组求和_分组求和法例题附答案
大家好,又见面了,我是你们的朋友全栈君。 在ireport中实现分组,求和。效果如下 name total A 2 A 3 subtotal 5 B 4 B 5 subtotal 9 添加Document–>Variables–>Variable Name 建立自定义的求和函数 设置相关属性。 Calculation 设置为sum reset type为report Reset group 选择自己创建的分组。 increment type 为Group Variable Expression填写你要累计的对象表达式。 new Integer($F{rxNo}) Initial Value Expression处填写数据类型的初始化对象。 new java.lang.Integer(0)
全栈程序员站长
2022/10/03
2.9K0

相似问题

按值对JSON进行分组

10

按公用值对javascript对象进行分组

11

按属性值在GeoJson中对JavaScript特性进行分组

15

如何在json中按值对字典键进行分组

217

按字段值和输出分组值在一行中对json对象进行分组。

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档