为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据字段搜索嵌套对象和分组

如何根据字段搜索嵌套对象和分组

回首忆惘然 2021-10-14 16:52:10
我有一个包含嵌套对象的数组,我想根据特定字段过滤对象。Items 数组包含一个 item 对象,该对象包含一些特定的字段,如 name、id、price 和 vendorid。我想根据 vendorid 字段对数组进行排序和过滤。例如像这样的数组:var items=[{item:{name:"cap",                  id:"5d767e1358ad1d0ca4894592",                  price:50,                   vendorid:"5d72d2a6d87c4628ba60e046"                 },            }            {item:{name:"shorts",                  price:100,                  vendorid:"5d71c51f2092d318a1bf8f53"                 }            },            {item:{name:"shoes",                  price:90,                  vendorid:"5d71c51f2092d318a1bf8f53"                  }            }            {item:{name:"black hood",                  price:120,                  vendorid:"5d71c51f2092d318a1bf8f53"                  }            }           ]我想创建一个输出这个的对象:results = {"5d71c51f2092d318a1bf8f53":[{name:"shorts"                                        price:100,                                     vendorid:"5d71c51f2092d318a1bf8f53"},                                       {name:"shoes",                                            price:90,                                     vendorid:"5d71c51f2092d318a1bf8f53"},                                       {name:"black hood",                                        price:120,                                     vendorid:"5d71c51f2092d318a1bf8f53"}                                   ],           "5d72d2a6d87c4628ba60e046":[{name:"cap",                                        id:"5d767e1358ad1d0ca4894592",                                        price:50,                                        vendorid:"5d72d2a6d87c4628ba60e046"                                       }                                      ]          }结果对象格式为{vendorid:[array containing objects with the same vendorid]}.非常感谢!!!
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以使用reduce()方法来做到这一点。


var items = [{ item: { name: "cap", id: "5d767e1358ad1d0ca4894592", price: 50, vendorid: "5d72d2a6d87c4628ba60e046" } } ,{ item: { name: "shorts", price: 100, vendorid: "5d71c51f2092d318a1bf8f53" } }, { item: { name: "shoes", price: 90, vendorid: "5d71c51f2092d318a1bf8f53" } }, { item: { name: "black hood", price: 120, vendorid: "5d71c51f2092d318a1bf8f53" } } ];


let result = items.reduce((obj, currentValue) => {

  

  if (!obj[currentValue.item.vendorid]) {

    obj[currentValue.item.vendorid] = [];

  }

  

   obj[currentValue.item.vendorid].push({

     ...currentValue.item

   });

  

  return obj;

}, {});


const orderedResult = {};


// Sorting on vendorid.

Object.keys(result).sort().forEach(key => orderedResult[key] = result[key]);


console.log(orderedResult);

关于对象属性排序的说明:


从 ECMAScript 2015 (ES6) 开始,对象自身的属性对于某些操作确实具有顺序,但依赖它并不是一个好主意。如果顺序很重要,那么最好使用数组或类似的东西。


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信