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

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

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

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

我的代码

代码语言:javascript
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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

复制
相关文章
项目端口可以设置为 6666 吗?
读万卷书,行万里路!有的技能可以从书里学会,有的技能却需要在实战中打怪升级慢慢掌握,今天就来和大家聊一个很多小伙伴经常遇到的问题。
江南一点雨
2020/07/29
2K0
项目端口可以设置为 6666 吗?
10.10.10.1可以设置为网关吗_个人如何做跨境电商
注:product/category路径的/会被替换为product-category 3.在src/views/modules下新建product商品文件夹,然后创建category.vue文件
全栈程序员站长
2022/09/19
9250
10.10.10.1可以设置为网关吗_个人如何做跨境电商
将 Vim 设置为 Rust IDE
Rust 语言旨在以 C++ 开发人员熟悉的方式实现具有安全并发性和高内存性能的系统编程。它也是 Stack Overflow 的 2019 年开发人员调查中最受欢迎的编程语言之一。
用户8639654
2021/09/15
1.8K0
go: kafka 将group设置为最新
有时,在确保group当前没有consumer的情况下,可以将这个group的偏移设置成最新,以保证下次启动时,group能从最新的消息消费。 代码:
超级大猪
2019/11/21
2.1K0
引用数据类型分为哪三类_类都是引用数据类型吗
说到引用数据类型,那么何为引用数据类型? 引用类型,都可以用null值作为值,也就是说可以在初始化的时候赋值为null,String是引用类型,也就是说可以使用null作为值。
全栈程序员站长
2022/11/01
7090
引用数据类型分为哪三类_类都是引用数据类型吗
父类静态方法可以重写吗?
比较坑的一个问题是,子类能否重写父类的静态方法? 答案当然是可以的。但是重写之后会发生什么,是否调用子类静态方法会执行子类的逻辑,这才是坑所在的地方。
PhoenixZheng
2018/08/07
1.5K0
将序列分解为单独的变量
python中,任何序列或可迭代的对象都可以通过一个简单的赋值操作来分解为单独的变量。前提是要求变量的总数和结构要与序列相吻合 #_*_coding:utf8_*_ p = (4, 5) x, y = p print(x) # 4 print(y) # 5 data = ['GuoJing', 30, ('杨过', '小龙女')] name, age, xialv = data print(name) # GuoJing print(xialv) # ('杨过', '小龙女') name, age, (
章鱼喵
2018/06/27
8960
C++变量的引用 | 使用变量的引用
C++可以对一个数据可以使用引用,引用是C++对C语言的一个重要扩充,引用是一种新的变量类型, 它的作用是为一个变量起一个别名。
小林C语言
2020/12/24
2.3K0
C++变量的引用 | 使用变量的引用
phpDoc注释
/** * 获得修改发票信息 * @param $id(传过来的参数) * @return array(返回的数方法的return格式) */ public function actionGetInvoiceInfo($id) { Yii::$app->response->format = Response::FORMAT_JSON; $invoice = $this->findOrder($id); /** @var User $user */(具体$user的注释在当前使
botkenni
2022/01/10
4280
java缓存设置_缓存数据可以清除吗
1、@Cacheable(key = “#vo.toString()”, value=”licence”) //载入缓存
全栈程序员站长
2022/11/09
1.6K0
Python变量类型及变量引用
       Python 不包含像 int 这样的简单类型 —— 只有对象类型, 如果 Python 中需要整数值,将整数赋值给相应变量(如i = 100 )即可。在后台,Python 将创建一个整数对象,并将对新对象的引用赋值给变量。
py3study
2020/01/15
2.5K0
java 中将引用置为null能help gc吗?
另一个说法是,具体有没有用,得看具体的代码。如果那个引用从来都没有逃逸出去,这样写就是没有什么作用的。有人说,逃逸分析是在1.6才实现,置null 操作在1.6之前可能有些用处。在即使逃逸分析已经很牛的现在,在Tree、链表这种结构中依旧要置null,因为还有一个问题是:浮动垃圾。
山行AI
2019/06/28
2.2K1
java 中将引用置为null能help gc吗?
怎样将Anaconda设置为国内的镜像
“ Anaconda是世界上最流行的数据分析平台(它们官网自己吹的nb),如果把镜像改为国内的可以节省很多时间。”
讲编程的高老师
2020/08/14
7.4K1
PyQt5 技巧篇-增加一个类级变量,类级变量的设置方法,类级"常量"设置方法
如果想增加一个全局变量来用的话,请看这篇文章: Python全局变量引用设置方法
小蓝枣
2020/09/22
8310
【Python】类型注解 ② ( 基础变量设置类型注解 | 类对象设置类型注解 | 容器变量设置简易类型注解 | 容器变量设置详细类型注解 )
元组 数据容器类型 的 详细 类型注解 , 需要为每个元素都进行类型标记 , 有几个元素就要标记几个类型 ;
韩曙亮
2023/10/11
2400
【Python】类型注解 ② ( 基础变量设置类型注解 | 类对象设置类型注解 | 容器变量设置简易类型注解 | 容器变量设置详细类型注解 )
PyQt5 技巧篇-增加一个类级变量,类级变量的设置方法,类级“常量“设置方法
如果想增加一个全局变量来用的话,请看这篇文章: Python全局变量引用设置方法
小蓝枣
2022/05/07
1000
Mac环境变量设置(以ADB为例)
按回车输入密码后用vi打开用户目录下的bash_profile文件。一定要用sudo,否则没权限保存文件。
毛大姑娘
2020/09/10
3.6K0
Shell 变量引用实例
初学 Shell 编程时,对变量各种引用使用不太熟悉,走了很多弯路,本文记录变量引用的一些用法,希望对大家有所帮助。
叨叨软件测试
2020/04/14
2.2K0
C++结构体变量的引用 | 结构体变量引用
如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。
小林C语言
2020/12/29
3.5K0
C++结构体变量的引用 | 结构体变量引用
点击加载更多

相似问题

可以将类成员变量设置为类函数的结果吗?

30

可以将变量设置为@ViewBuilder吗?

19

可以将[XmlAttribute]设置为类的缺省设置吗?

21

ArrayObject类的phpdoc变量

19

在phpDoc中,将标记设置为标记?

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文