首页 > 解决方案 > 根据值中的文本将数组拆分为小数组

问题描述

我有一个大数组,看起来像这个例子:

let array = ['aa-we', 'aa-we__qq', 'aa-we__qw', 'gsPlsOdd', 'bc-po-lp', 'bc-po-lp--ps', 'de', 'de__io', 'de__sl', 'de--xz', 'ccsDdd'];

我想按值将此数组拆分为小数组:

let array = [
  ['aa-we', 'aa-we__qq', 'aa-we__qw'],
  ['bc-po-lp', 'bc-po-lp--ps'],
  ['de', 'de__io', 'de__sl', 'de--xz']  
]

// and camelcase strings should be removed 

数组中的值具有类似于 BEM 选择器的语法,因此如果不同字符串的前缀相同,则应将它们包装在单个数组中。

如果可能的话,我如何在没有额外库的情况下做到这一点?

感谢您的帮助或提示!

标签: javascriptarrayssortingecmascript-6

解决方案


我会做这样的事情,然后过滤掉你不想要的东西。

let array = ['aa-we', 'aa-we__qq', 'aa-we__qw', 'gsPlsOdd', 'bc-po-lp', 'bc-po-lp--ps', 'de', 'de__io', 'de__sl', 'de--xz', 'ccsDdd'];

array = array.filter((a) => !a.match(/[A-Z]/))

let result = groupBy(array, (str)=> str.split(/[-_]/)[0])

console.log(Object.values(result))

function groupBy(arr, condition) {
  return arr.reduce((result, current) => {
    const key = condition(current);
    (result[key] || (result[key] = [])).push(current)
    return result
  }, {})
}


推荐阅读