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

我有一个包含嵌套对象的数组,我想根据特定字段过滤对象。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]}.


非常感谢!!!


回首忆惘然
浏览 164回答 1
1回答

喵喔喔

您可以使用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) 开始,对象自身的属性对于某些操作确实具有顺序,但依赖它并不是一个好主意。如果顺序很重要,那么最好使用数组或类似的东西。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript