Parse keypath to array item from string
How can I parse a string like this ""0.children.13.children.0"
to the path to the array item in JavaScript?
Example: "0.children.13.children.0"
> arr[0].children[13].children[0]
Thanks in advance!
javascript arrays parsing
add a comment |
How can I parse a string like this ""0.children.13.children.0"
to the path to the array item in JavaScript?
Example: "0.children.13.children.0"
> arr[0].children[13].children[0]
Thanks in advance!
javascript arrays parsing
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
I use Javascript
– Danny White
Nov 19 '18 at 6:56
why don't you justsplit(".")
? Now you have all the keys and you can resolve the valuevar value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09
add a comment |
How can I parse a string like this ""0.children.13.children.0"
to the path to the array item in JavaScript?
Example: "0.children.13.children.0"
> arr[0].children[13].children[0]
Thanks in advance!
javascript arrays parsing
How can I parse a string like this ""0.children.13.children.0"
to the path to the array item in JavaScript?
Example: "0.children.13.children.0"
> arr[0].children[13].children[0]
Thanks in advance!
javascript arrays parsing
javascript arrays parsing
edited Nov 19 '18 at 9:40
Ashish Kamble
632519
632519
asked Nov 19 '18 at 6:54
Danny WhiteDanny White
11
11
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
I use Javascript
– Danny White
Nov 19 '18 at 6:56
why don't you justsplit(".")
? Now you have all the keys and you can resolve the valuevar value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09
add a comment |
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
I use Javascript
– Danny White
Nov 19 '18 at 6:56
why don't you justsplit(".")
? Now you have all the keys and you can resolve the valuevar value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
I use Javascript
– Danny White
Nov 19 '18 at 6:56
I use Javascript
– Danny White
Nov 19 '18 at 6:56
why don't you just
split(".")
? Now you have all the keys and you can resolve the value var value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
why don't you just
split(".")
? Now you have all the keys and you can resolve the value var value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09
add a comment |
1 Answer
1
active
oldest
votes
Using one string and split it on .
could break if your objects have dots in their keys like {'first.name':'John'}
so it would probably better to provide an array with strings/ints instead.
Here is an implementation of lodash get with the difference that it only takes path as string:
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369658%2fparse-keypath-to-array-item-from-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Using one string and split it on .
could break if your objects have dots in their keys like {'first.name':'John'}
so it would probably better to provide an array with strings/ints instead.
Here is an implementation of lodash get with the difference that it only takes path as string:
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
add a comment |
Using one string and split it on .
could break if your objects have dots in their keys like {'first.name':'John'}
so it would probably better to provide an array with strings/ints instead.
Here is an implementation of lodash get with the difference that it only takes path as string:
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
add a comment |
Using one string and split it on .
could break if your objects have dots in their keys like {'first.name':'John'}
so it would probably better to provide an array with strings/ints instead.
Here is an implementation of lodash get with the difference that it only takes path as string:
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
Using one string and split it on .
could break if your objects have dots in their keys like {'first.name':'John'}
so it would probably better to provide an array with strings/ints instead.
Here is an implementation of lodash get with the difference that it only takes path as string:
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
var data = [
{
children: [
{
children: [{ name: 'got it' }],
},
],
},
null,
];
const get = (object, path = '', defaultValue) => {
const recur = (object, path, defaultValue) => {
if (typeof object !== 'object') {
return defaultValue;
}
if (path.length === 0) {
return object;
}
if (object !== null && path[0] in object) {
return recur(
object[path[0]],
path.slice(1),
defaultValue,
);
}
return defaultValue;
};
return recur(object, path.split('.'), defaultValue);
};
console.log(get(undefined, '', 'Hello World'));//defaults to hello world
console.log(get(data, 'does.not.exist', 'Hello World'));//defaults to hello world
console.log(get(data, '1', 'Hello World'));//will be null (data[0] is null)
console.log(get(data, '1.anything', 'Hello World'));//defaults to hello world
console.log(//gets item data[0].children[0].children[0]
get(data, '0.children.0.children.0', 'Hello World'),
);
answered Nov 19 '18 at 8:22
HMRHMR
13.7k113898
13.7k113898
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
add a comment |
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
Thanks very much! It helped me!
– Danny White
Nov 19 '18 at 11:08
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369658%2fparse-keypath-to-array-item-from-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Which language are you using?
– Ankit Agarwal
Nov 19 '18 at 6:54
I use Javascript
– Danny White
Nov 19 '18 at 6:56
why don't you just
split(".")
? Now you have all the keys and you can resolve the valuevar value = path.split(".").reduce((obj,key) => obj[key], arr);
– Thomas
Nov 19 '18 at 7:25
Thank you! Using split function is very useful in this case
– Danny White
Nov 19 '18 at 11:09