javascript - 根据值中的文本将数组拆分为小数组
问题描述
我有一个大数组,看起来像这个例子:
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 选择器的语法,因此如果不同字符串的前缀相同,则应将它们包装在单个数组中。
如果可能的话,我如何在没有额外库的情况下做到这一点?
感谢您的帮助或提示!
解决方案
我会做这样的事情,然后过滤掉你不想要的东西。
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
}, {})
}
推荐阅读
- android - Flutter pageview 小部件更改屏幕参数并呈现它,但它不起作用
- c# - CartItems 在调试 c# 期间返回 0
- progressive-web-apps - PWA - Mailto 从缓存中排除?
- python-3.x - 网页从浏览器到 API 的显示方式不同
- python - 如何在树莓派中使用 pynput 结束循环?
- amazon-web-services - 没有创建标签
- vue.js - 如何使用道具和本地存储制作 vue3 暗模式?
- pandas - python3:熊猫按几列分组并将行值转换为多列
- ios - 在构建之前签署 iOS dylib
- c# - 'Procedure or function '...' expects parameter '...', which was not supplied.'