【问题标题】:javascript sort array of string by value after special characterjavascript在特殊字符后按值对字符串数组进行排序
【发布时间】:2021-07-26 21:10:09
【问题描述】:

我想按包含冒号 (:) 值的数组排序

这是下面的输入

[
  'Severity',
  'Name',
  'U1A_Shift SCM: UPTT-Pressure (Bara)',
  'U1A_Shift SCM: DPTT-Pressure (Bara)',
  'U3B SCM: APTT-Pressure (Bara)',      
  'U3B SCM: UPTT-Pressure (Bara)',      
  'U1B SCM: DPTT-Pressure (Bara)',      
  'U1B SCM: UPTT-Pressure (Bara)',      
  'U3B SCM: DPTT-Pressure (Bara)',      
  'U1A_Shift SCM: UPTT-Temp (DegC)',    
  'U1A_Shift SCM: DPTT-Temp (DegC)',    
  'U3B SCM: APTT-Temp (DegC)',
  'U3B SCM: UPTT-Temp (DegC)',
  'U1B SCM: DPTT-Temp (DegC)',
  'U1B SCM: UPTT-Temp (DegC)',
  'U3B SCM: DPTT-Temp (DegC)',
  'U1B SCM: PCV-CHOKE status - Control position',
  'U3B SCM: PCV-CHOKE status - Control position',
  'U1A_Shift SCM: PCV-CHOKE status - Control position',
  'Alarms',
  'Advisories',
  '__row_index'
]

我想按冒号 (:) 后的值对其进行排序/分组

这应该低于输出

[
    'Severity',
    'Name': 'U3B',
    'U1A_Shift SCM: UPTT-Pressure (Bara)',    // grouped by UPTT-Pressure (Bara)
    'U3B SCM: UPTT-Pressure (Bara)',
    'U1B SCM: UPTT-Pressure (Bara)',
    'U1A_Shift SCM: DPTT-Pressure (Bara)',    //grouped by DPTT-Pressure (Bara)
    'U1B SCM: DPTT-Pressure (Bara)',
    'U3B SCM: DPTT-Pressure (Bara)',
    'U3B SCM: APTT-Pressure (Bara)', // grouped by APTT-Pressure (Bara)
    'U1A_Shift SCM: UPTT-Temp (DegC)', // grouped by UPTT-Temp (DegC)
    'U3B SCM: UPTT-Temp (DegC)',
    'U1B SCM: UPTT-Temp (DegC)',
    'U1A_Shift SCM: DPTT-Temp (DegC)', // grouped by DPTT-Temp (DegC)
    'U1B SCM: DPTT-Temp (DegC)',
    'U3B SCM: DPTT-Temp (DegC)',
    'U3B SCM: APTT-Temp (DegC)', // grouped by APTT-Temp (DegC)
    'U1B SCM: PCV-CHOKE status - Control position', // grouped by PCV-CHOKE status - Control position
    'U3B SCM: PCV-CHOKE status - Control position',
    'U1A_Shift SCM: PCV-CHOKE status - Control position',
    'Alarms',
    'Advisories',
    '__row_index',
]

我需要对位于“:”之后的这个数组值进行排序,例如:APTT-Temp (DegC)

如何对数组值进行排序/分组

任何帮助将不胜感激:)

【问题讨论】:

  • 所需的输出是语法错误?
  • 与您的预期结果无关,在我看来是有序的。
  • @evolutionxbox :对不起,最初它是对象,我现在已将所需的输出更新为数组。 :)
  • 另请注意,输入和输出都不是有效的 JSON。
  • 顺序是什么?它看起来很随机

标签: javascript arrays json angularjs


【解决方案1】:

您可以收集所有组和单个值并返回一个平面数组。

const
    data = ['Severity', 'Name', 'U1A_Shift SCM: UPTT-Pressure (Bara)', 'U1A_Shift SCM: DPTT-Pressure (Bara)', 'U3B SCM: APTT-Pressure (Bara)', 'U3B SCM: UPTT-Pressure (Bara)', 'U3B SCM: DPTT-Pressure (Bara)', 'U1A_Shift SCM: UPTT-Temp (DegC)', 'U1A_Shift SCM: DPTT-Temp (DegC)', 'U3B SCM: APTT-Temp (DegC)', 'U3B SCM: UPTT-Temp (DegC)', 'U1B SCM: DPTT-Temp (DegC)', 'U1B SCM: UPTT-Temp (DegC)', 'U3B SCM: DPTT-Temp (DegC)', 'U1B SCM: PCV-CHOKE status - Control position', 'U3B SCM: PCV-CHOKE status - Control position', 'U1B SCM: DPTT-Pressure (Bara)', 'U1B SCM: UPTT-Pressure (Bara)', 'U1A_Shift SCM: PCV-CHOKE status - Control position', 'Alarms', 'Advisories', '__row_index'],
    map = data.reduce((m, s) => {
        const group = s.split(/:\s*/)[1] || m.size;
        return m.set(group, [...(m.get(group) || []), s]);
    }, new Map),
    grouped = Array.from(map.values()).flat(),
    counts = Array
        .from(map, ([k, { length }]) => [k, typeof k === 'string' && length])
        .filter(([, length]) => length);

console.log(counts);
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 嗨,尼娜,我可能需要做些什么改变才能实现这一目标stackoverflow.com/questions/67369165/…
  • 您可以按照上面分组键的顺序构建一个新对象。
  • 你能帮我完成这部分吗,我急需:)
  • @MitulPanchal 类似this?
  • @NinaScholz 是的,对象的值怎么样,我们如何获取它 for(const key of grouped) { obj[key] = 'whatever'; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 2014-10-28
  • 2014-07-10
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多