- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象
我想要实现的是将每个一级键名称作为字符串获取,并将这些字符串分组到新数组中,每个数组用于特定组。然后,根据每个正则表达式模式内的匹配顺序对每个组数组进行排序。
我目前拥有的是将字符串分组到新数组中的代码,但在数组中时不对它们进行排序。
我目前得到的是:
["firstName", "lastName", "birthDate", "birthPlace", "fatherName", "identityCard", "pesel", "passportNo", "passportExpirationDate", "citizenship"] // output of generalSectionElements
但我想要的是数组已经排序,因此 citizenship
字符串应该位于 fatherName
之后,而不是在数组的末尾。就像上面的正则表达式模式中的匹配顺序一样。
我确信这是可能的,但我无法全神贯注,任何人都可以至少给我一些提示吗? :/
const generalSectionPattern = /^(fir|las|(?=\w+D)bir\w+|(?=\w+P)bir\w+|fat|cit|ide|pes|(?=\w+N)pas\w+|(?=\w+E)pas\w+)/
const contactSectionPattern = /^(ema|mob|pre)/
const positionSectionPattern = /^(pos)/
const editorialSectionPattern = /((?!\w+Phone)edi\w*|(?=\w+Phone)edi\w*|fax)/
const flightSectionPattern = /^(bus|car|par|hot|pla|tra|des)/
const generalSectionElements = Object.keys(myObj).filter(elem => generalSectionPattern.test(elem))
console.log(generalSectionElements)
<script>
const myObj = {
"firstName": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"lastName": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"editorialOffice": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"email": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"birthDate": { "fieldType": "DATE", "value": null, "enabled": true, "required": true },
"birthPlace": { "fieldType": "TEXT", "value": null, "enabled": true, "required": false },
"fatherName": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"identityCard": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"bothDocuments": false,
"pesel": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"passportNo": { "fieldType": "TEXT", "value": null, "enabled": true, "required": false },
"passportExpirationDate": { "fieldType": "DATE", "value": null, "enabled": true, "required": false },
"pressCardNumber": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"editorialOfficePhone": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"fax": { "fieldType": "TEXT", "value": null, "enabled": true, "required": false },
"mobilePhone": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"position": { "fieldType": "RADIO", "value": null, "enabled": true, "required": true },
"citizenship": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"plane": { "fieldType": "SELECT", "value": null, "enabled": true, "required": false },
"bus": { "fieldType": "SELECT", "value": null, "enabled": true, "required": false },
"hotel": { "fieldType": "SELECT", "value": null, "enabled": true, "required": false },
"transmission": { "fieldType": "TEXT", "value": null, "enabled": true, "required": false },
"parking": { "fieldType": "SELECT", "value": null, "enabled": true, "required": false },
"carInfo": { "fieldType": "TEXT", "value": null, "enabled": true, "required": false },
"statement": { "fieldType": "TEXT", "value": null, "enabled": true, "required": true },
"descriptiveFields": [
{ "fieldType": "RADIO", "value": null, "enabled": false, "required": false },
{ "fieldType": "TEXTAREA", "value": null, "enabled": false, "required": false },
{ "fieldType": "TEXT", "value": null, "enabled": false, "required": false }
]
}
</script>
最佳答案
好的,浏览 Mozilla 开发者网络上的 JS Array 文档,我已经测试了我的问题的解决方案。
这是代码
const myObj = {
"firstName": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"lastName": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"editorialOffice": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"email": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"birthDate": {
"fieldType": "DATE",
"value": null,
"enabled": true,
"required": true
},
"birthPlace": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": false
},
"fatherName": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"identityCard": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"bothDocuments": false,
"pesel": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"passportNo": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": false
},
"passportExpirationDate": {
"fieldType": "DATE",
"value": null,
"enabled": true,
"required": false
},
"pressCardNumber": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"editorialOfficePhone": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"fax": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": false
},
"mobilePhone": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"position": {
"fieldType": "RADIO",
"value": null,
"enabled": true,
"required": true
},
"citizenship": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"plane": {
"fieldType": "SELECT",
"value": null,
"enabled": true,
"required": false
},
"bus": {
"fieldType": "SELECT",
"value": null,
"enabled": true,
"required": false
},
"hotel": {
"fieldType": "SELECT",
"value": null,
"enabled": true,
"required": false
},
"transmission": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": false
},
"parking": {
"fieldType": "SELECT",
"value": null,
"enabled": true,
"required": false
},
"carInfo": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": false
},
"statement": {
"fieldType": "TEXT",
"value": null,
"enabled": true,
"required": true
},
"descriptiveFields": [{
"fieldType": "RADIO",
"value": null,
"enabled": false,
"required": false
},
{
"fieldType": "TEXTAREA",
"value": null,
"enabled": false,
"required": false
},
{
"fieldType": "TEXT",
"value": null,
"enabled": false,
"required": false
}
]
}
const generalSectionPatterns = [/^(fir)/, /^(las)/, /^((?=\w+D)bir\w+)/, /^((?=\w+P)bir\w+)/, /^(fat)/, /^(cit)/, /^(ide)/, /^(pes)/, /^((?=\w+N)pas\w+)/, /^((?=\w+E)pas\w+)/]
const contactSectionPatterns = [/^(ema)/, /^(mob)/, /^(pre)/]
const positionSectionPatterns = [/^(pos)/]
const editorialSectionPatterns = [/^((?!\w+Phone)edi\w*)/, /^((?=\w+Phone)edi\w*)/, /^(fax)/]
const flightSectionPatterns = [/^(bus)/, /^(car)/, /^(par)/, /^(hot)/, /^(pla)/, /^(tra)/, /^(des)/]
const generalSectionElements = generalSectionPatterns.map(pattern => Object.keys(myObj).find(elem => pattern.test(elem)))
console.log('sorted generalSectionElements:\n', generalSectionElements)
const contactSectionElements = contactSectionPatterns.map(pattern => Object.keys(myObj).find(elem => pattern.test(elem)))
console.log('sorted contactSectionElements:\n', contactSectionElements)
const positionSectionElements = positionSectionPatterns.map(pattern => Object.keys(myObj).find(elem => pattern.test(elem)))
console.log('sorted positionSectionElements:\n', positionSectionElements)
const editorialSectionElements = editorialSectionPatterns.map(pattern => Object.keys(myObj).find(elem => pattern.test(elem)))
console.log('sorted editorialSectionElements:\n', editorialSectionElements)
const flightSectionElements = flightSectionPatterns.map(pattern => Object.keys(myObj).find(elem => pattern.test(elem)))
console.log('sorted flightSectionElements:\n', flightSectionElements)
您可以在 repl.it 实时测试代码还有。
第二个解决方案是使用regex-sort :
function regexSort(list, patterns) {
function presetIndex(input) {
for (var i = 0; i < patterns.length; ++i) {
if (patterns[i].test(input)) {
return i;
}
}
return Infinity;
}
let indexes = list.map(c => ({
input: c,
index: presetIndex(c)
}));
indexes.sort(
(a, b) => a.index < b.index ? -1 : 1
);
return indexes.map(c => c.input);
};
第三个可能是将一些 Array 方法与 .sort() 结合起来,但正如我上面所写的,没有弄清楚在 sort 的比较器函数中到底要比较什么......
无论如何,感谢您对我的问题感兴趣并给我任何答复!干杯!
关于javascript - 如何通过正则表达式模式匹配对字符串数组中的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60993278/
在开发中的网页上,我在 IE 上遇到此错误 element = $(element); 此代码位于prototype.js 预期对象 如何消除此错误。 更新: 现场也使用了 jQuery。 最佳答
我有两个大小相同的嵌套数组: Array1 =[[1, 2], [], [2, 3]] Array2= [[1, 4], [8, 11], [3, 6]] 我需要将它们合并到一个数组中,如下所示: A
我有一些 jQuery 代码,当单击具有特定 ID 的项目时运行。当 ID 是 的一部分时,它就可以工作。元素,但当它位于 中时则不然元素。为什么会这样呢?我想使用 an,因为如果用户关闭了 Ja
Flex-box 规范 3声明 flex 元素不是 block 容器: A flex item establishes a new formatting context for its content
我遇到了一个意想不到的问题。 HTML JS $(function() { var $divs = $('.myDiv'); // create new div not in
我使用 Bootstrap 和 Ember.js 得到了一个无序列表。每个列表项都是一个显示新帖子的链接,每当您单击该链接时,Ember 都会添加类 active默认情况下。我正在使用 Bootstr
我正在尝试让一个函数正常工作,但运气不佳,所以我想向 Stackoverflow 智囊团提出一个新手问题! 基本上,我有一个表单,并且循环遍历所有元素以查看是否存在自定义数据属性。如果存在,则保持该元
我想映射一个可选数组,删除那些 nil 值,并使用另一个函数映射非 nil 值。 我知道我可以通过使用 compactMap 然后使用常规 map 来实现这一点,但我只想遍历数组一次。 我为此实现了一
我如何定位 li 元素,除非它们出现在 之后元素?换句话说,我想针对步骤而不是注释。 我尝试向 OL 添加一个我想从选择中排除的类,但我想出的代码不起作用。 (顺便说一句,重构 html 不是一种选
Warning 1 The element 'system.webServer' has invalid child element 'rewrite'. List of possible eleme
我正在尝试编写一个脚本,该脚本将遍历 HTML 源并创建 DOM 的 JSON 文件,然后使用 d3.js 在 TreeView 中显示该文件。我遇到的问题是不仅希望显示元素(TITLE、P、LI 等
我有以下 HTML 表单:- Option 1 Option 2
我试图在选定的 HTML 元素之后选择下一个具有类名 slider-value 的 span 元素。我尝试了多种解决方案,但没有一个有效。 我可以通过 id 选择它,但我不希望那样做使代码冗余。 $(
如果电子邮件地址无效,我想在屏幕上显示一条消息“请输入有效的电子邮件地址”。 body 元素的innerHTML 语句工作正常,但我用于p 元素的innerHTML 语句不起作用。 有一次,当我测试它
以下 jQuery 代码调用 ul 元素,查找元素内的前 三个 li 列表项,并隐藏剩余的 li 项目。然后,它附加一个 li 元素,其中显示“显示更多...”,并且在单击时显示之前隐藏的列表项。 (
我问了a question早些时候关于将编辑/删除链接与 h1 元素内联的最佳方法。我能够通过给出的答案实现这一点,但我现在有额外的要求,我需要在 h1 下方显示一个段落并编辑/删除链接。 到目前为止
我使用 MVC 4 和 knockout.js 库版本 2.1.0 显示从服务器检索到的大量文件的表中的以下摘录。 0)"> 正在正确检索数据,
我创建了一个脚本,该脚本在鼠标悬停在父容器上时激活,并且应该将其子元素移离鼠标。我目前已经让它工作了,但是代码的某些部分似乎与 REACT 代码应该是什么样子相矛盾。特别是两个部分。 我在渲染函数中使
我是 JS 新手,正在尝试理解项目 https://github.com/tastejs/todomvc 的代码 请参阅屏幕截图,我尝试对 button X 以及其父元素 div 设置断点,但在这两种
例如,假设有一个带有奇特颜色的标记: Something written here 使用 Visual Studio 2017 和 MVC 5 元素,有没有办法检查和定位当前应用了哪些样式,以及负责它
我是一名优秀的程序员,十分优秀!