按名称属性动态信息列出计数数组

Posted

技术标签:

【中文标题】按名称属性动态信息列出计数数组【英文标题】: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

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

【问题讨论】:

【参考方案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
  

【讨论】:

以上是关于按名称属性动态信息列出计数数组的主要内容,如果未能解决你的问题,请参考以下文章

根据字符串属性按字母顺序对对象数组进行排序

自动列出当前 Object 数据迭代的每个属性值的动态表组件(ngFor 指令);

按名称或计数排序多维数组

制作学生信息(姓名,学号,成绩)管理系统(用Java)

在 SQLite 中按计数排序单行数组

动态创建多个数组