【问题标题】:List count array by name attribute dynamics information按名称属性动态信息列出计数数组
【发布时间】:2022-01-18 21:58:10
【问题描述】:

我需要显示一个具有现有属性列表的对象并显示它出现的次数:

有效载荷:

[
    [
        "valor"
    ],
    [
        "tipo de entrada",
        "data entrada",
        "valor"
    ],
    [
        "tipo de entrada",
        "data entrada",
        "valor"
    ],
    [
        "tipo de entrada"
    ],
    [
        "tipo de entrada"
    ],
    [
        "tipo de entrada"
    ],
    [
        "valor"
    ],
    [
        "valor"
    ],
    [
        "valor"
    ],
    [
        "valor"
    ],
    [
        "tipo de entrada",
        "data entrada",
        "valor"
    ]
]

结果:

{
    valor: 16,
    tipo_entrada: 9,
    dqta_entrada: 6
}

作为动态的属性列表,它可以包含其他值(值,名称,年龄...)

【问题讨论】:

    标签: javascript arrays reduce dynamic-arrays reducers


    【解决方案1】:

    您可以使用array#flat() 展平您的数组,然后使用array#reduce 计算每个单词的频率。

    const arr = [ [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ] ],
          result = arr.flat().reduce((r, word) => {
            r[word] = (r[word] ?? 0) + 1;
            return r;
          },{});
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      这是一个单行:

      var mainData = [ [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada", "data entrada", "valor" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "tipo de entrada" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "valor" ], [ "tipo de entrada", "data entrada", "valor" ] ]
      
      var resultObj = {};
      mainData.map(data => data.forEach(subData => { resultObj[subData] = (Object.keys(resultObj).indexOf(subData) == -1 ? 1 : resultObj[subData] + 1) }))
      console.log(resultObj)

      【讨论】:

        【解决方案3】:

        您可以使用flat 并使用它。

        此代码定义并解释了解决问题的方法:

        const result = {};
        const initialArray = [['tomato'], ['ketchup', 'potato']];
        const strings = initialArray.flat(); // ['tomato', 'ketchup', 'potato']
        
        for (const string of strings) {
          // string is 'tomato' for example
          // result[string] would then be result[tomato]
        
          if (result[string]) {
            result[string] += 1; // result.tomato already exists? Add 1 to it
          } else {
            result[string] = 1; // if it does not exists, create it with value 1
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-24
          • 2021-12-10
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 2020-12-05
          • 1970-01-01
          • 2012-08-21
          相关资源
          最近更新 更多