Parse keypath to array item from string












-1















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!










share|improve this question

























  • 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 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
















-1















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!










share|improve this question

























  • 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 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














-1












-1








-1








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!










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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 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



















  • 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 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

















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












1 Answer
1






active

oldest

votes


















0














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'),
);








share|improve this answer
























  • Thanks very much! It helped me!

    – Danny White
    Nov 19 '18 at 11:08











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
});


}
});














draft saved

draft discarded


















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









0














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'),
);








share|improve this answer
























  • Thanks very much! It helped me!

    – Danny White
    Nov 19 '18 at 11:08
















0














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'),
);








share|improve this answer
























  • Thanks very much! It helped me!

    – Danny White
    Nov 19 '18 at 11:08














0












0








0







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'),
);








share|improve this answer













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'),
);






share|improve this answer












share|improve this answer



share|improve this answer










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



















  • 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


















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

鏡平學校

ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

Why https connections are so slow when debugging (stepping over) in Java?