Skip to content

Commit

Permalink
extend get function to handle path contain quote (#336)
Browse files Browse the repository at this point in the history
* extend get function to handle path contain quote

* Use const instead of updating key value

---------

Co-authored-by: shenyang <[email protected]>
Co-authored-by: Ray Epps <[email protected]>
Co-authored-by: Ray Epps <[email protected]>
4 people authored Feb 21, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 342924b commit 2d6c10a
Showing 5 changed files with 10 additions and 5 deletions.
3 changes: 2 additions & 1 deletion cdn/radash.esm.js
Original file line number Diff line number Diff line change
@@ -709,11 +709,12 @@ const omit = (obj, keys2) => {
const get = (value, path, defaultValue) => {
const segments = path.split(/[\.\[\]]/g);
let current = value;
for (const key of segments) {
for (let key of segments) {
if (current === null)
return defaultValue;
if (current === void 0)
return defaultValue;
key = key.replace(/['"]/g, "");
if (key.trim() === "")
continue;
current = current[key];
3 changes: 2 additions & 1 deletion cdn/radash.js
Original file line number Diff line number Diff line change
@@ -712,11 +712,12 @@ var radash = (function (exports) {
const get = (value, path, defaultValue) => {
const segments = path.split(/[\.\[\]]/g);
let current = value;
for (const key of segments) {
for (let key of segments) {
if (current === null)
return defaultValue;
if (current === void 0)
return defaultValue;
key = key.replace(/['"]/g, "");
if (key.trim() === "")
continue;
current = current[key];
2 changes: 1 addition & 1 deletion cdn/radash.min.js
5 changes: 3 additions & 2 deletions src/object.ts
Original file line number Diff line number Diff line change
@@ -221,8 +221,9 @@ export const get = <TDefault = unknown>(
for (const key of segments) {
if (current === null) return defaultValue as TDefault
if (current === undefined) return defaultValue as TDefault
if (key.trim() === '') continue
current = current[key]
const dequoted = key.replace(/['"]/g, '')
if (dequoted.trim() === '') continue
current = current[dequoted]
}
if (current === undefined) return defaultValue as TDefault
return current
2 changes: 2 additions & 0 deletions src/tests/object.test.ts
Original file line number Diff line number Diff line change
@@ -341,11 +341,13 @@ describe('object module', () => {
test('returns specified value or default using path', () => {
assert.equal(_.get({ age: undefined }, 'age', 22), 22)
assert.equal(_.get(jay, 'friends[0].age'), 17)
assert.equal(_.get(jay, 'friends["0"].age'), 17)
assert.equal(_.get(jay, 'friends.0.age'), 17)
assert.equal(_.get(jay, 'friends.1.age'), null)
assert.equal(_.get(jay, 'friends.0.friends[0].name'), 'sara')
assert.equal(_.get(jay, 'name'), 'jay')
assert.equal(_.get(jay, '[name]'), 'jay')
assert.equal(_.get(jay, '["name"]'), 'jay')
assert.equal(_.get(jay, 'friends[0][name]'), 'carl')
assert.equal(_.get(jay, 'friends[0].friends[0].friends[0].age', 22), 22)
})

0 comments on commit 2d6c10a

Please sign in to comment.