mirror of
https://github.com/toss/es-toolkit.git
synced 2024-11-28 03:34:26 +03:00
perf(has/get): improve performance (#518)
This commit is contained in:
parent
7258981909
commit
b1bb77b602
@ -1,3 +1,21 @@
|
||||
const ESCAPE_REGEXP = /\\(\\)?/g;
|
||||
const PROPERTY_REGEXP = RegExp(
|
||||
// Match anything that isn't a dot or bracket.
|
||||
'[^.[\\]]+' +
|
||||
'|' +
|
||||
// Or match property names within brackets.
|
||||
'\\[(?:' +
|
||||
// Match a non-string expression.
|
||||
'([^"\'][^[]*)' +
|
||||
'|' +
|
||||
// Or match strings (supports escaping characters).
|
||||
'(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2' +
|
||||
')\\]' +
|
||||
'|' +
|
||||
// Or match "" as the space between consecutive dots or empty brackets.
|
||||
'(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))',
|
||||
'g'
|
||||
);
|
||||
/**
|
||||
* Converts a deep key string into an array of path segments.
|
||||
*
|
||||
@ -16,25 +34,6 @@
|
||||
* toPath('.a[b].c.d[e]["f.g"].h') // Returns ['', 'a', 'b', 'c', 'd', 'e', 'f.g', 'h']
|
||||
*/
|
||||
export function toPath(deepKey: string): string[] {
|
||||
const ESCAPE_REGEXP = /\\(\\)?/g;
|
||||
const PROPERTY_REGEXP = RegExp(
|
||||
// Match anything that isn't a dot or bracket.
|
||||
'[^.[\\]]+' +
|
||||
'|' +
|
||||
// Or match property names within brackets.
|
||||
'\\[(?:' +
|
||||
// Match a non-string expression.
|
||||
'([^"\'][^[]*)' +
|
||||
'|' +
|
||||
// Or match strings (supports escaping characters).
|
||||
'(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2' +
|
||||
')\\]' +
|
||||
'|' +
|
||||
// Or match "" as the space between consecutive dots or empty brackets.
|
||||
'(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))',
|
||||
'g'
|
||||
);
|
||||
|
||||
const result: string[] = [];
|
||||
|
||||
if (deepKey[0] === '.') {
|
||||
|
Loading…
Reference in New Issue
Block a user