如何使用 Lodash 遍历对象数组并查找出现的次数和元素名称

How do I traverse an array of objects and find the number of times and element name occurs using Lodash

与我的另一个问题相关,图像是How do I get rid of PROTOTYPE in my new JSON Object from an Array?

我希望能够做到以下几点:

更进一步...

目前相同的 MARKET (name, displayName) 中的每一个都包含 1 到“n”个项目。

所以,我想计算有多少项目在内部或重复。

例如:

NAME: "IL" may have 300 
NAME: "WA" may have 1000 
NAME: "OR" may have 100 

and so on.

在这些对象中,有 MARKET 这个词。市场是上面的:IL, WA, CA, 等等是 MARKETS 这样的:

[
    {
      ID: 1,
      NAME: "SomeName1",
      MARKET: "IL",
      LOCATION: "6 Miles east"
    },
    {
      ID: 2,
      NAME: "SomeName2",
      MARKET: "IL",
      LOCATION: "36 Miles east"
    },
    {
      ID: 3,
      NAME: "SomeName3",
      MARKET: "WA",
      LOCATION: "3 Miles west"
    },
    {
      ID: 4,
      NAME: "SomeName4",
      MARKET: "WA",
      LOCATION: "33 Miles west"
    },
    {
      ID: 5,
      NAME: "SomeName5",
      MARKET: "OR",
      LOCATION: "23 Miles north"
    },
    ...
]

我想为收到的 MAP 函数添加一个计数作为解决方案:

const newObj = newMarketArray.map(e => ({ name: e, displayName: e }));

因此当值出现在上图中时,我可以获得例如 WA、IL 和 OR 的出现次数。

最后的 JSON 应该有一个额外的元素:

   displayName: WA,
   name: WA,
   count: 33

最后,我想对 JSON 对象的值进行排序,这可能非常简单。

更新:有人提出了 MAP

的问题
const newObj = newMarketArray.map(e => ({ name: e, displayName: e })); 

为假。这不是真的。它 returns IMAGE 中的值。所以这肯定不是假的。

我所需要的只是计算出现 CA 的实例数,然后像这样放置它:

const newObj = newMarketArray.map(e => ({ name: e, displayName: e, count: somecount }));

仅供参考:newMarketArray 包含 3300 多个对象

如果我已经很明白你想要什么了:

newMarketArray = [
    {
      ID: 1,
      NAME: "SomeName1",
      MARKET: "IL",
      LOCATION: "6 Miles east"
    },
    {
      ID: 2,
      NAME: "SomeName2",
      MARKET: "IL",
      LOCATION: "36 Miles east"
    },
    {
      ID: 3,
      NAME: "SomeName3",
      MARKET: "WA",
      LOCATION: "3 Miles west"
    },
    {
      ID: 4,
      NAME: "SomeName4",
      MARKET: "WA",
      LOCATION: "33 Miles west"
    },
    {
      ID: 5,
      NAME: "SomeName5",
      MARKET: "OR",
      LOCATION: "23 Miles north"
    }
]

let objCount = newMarketArray.reduce((acc, obj) => {
    acc[obj.MARKET] = (acc[obj.MARKET] || 0) + 1;
    return acc;
}, {});
console.log(objCount);

let arrResult = Object.keys(objCount).map(k => ({'name': k, 'displayName': k, 'count': objCount[k] }));

console.log(arrResult)

之后,您可以根据需要对字典进行排序(按您想要的值..)