Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am new to java script , so my apologies if this is trivial. My question is syntactical, if I have an object:

this.state = {
  A : {
       B: {
           C : [
             {value : 'bob'},
             {value : 'Jim'},
             {value : 'luke'},
           ]
       }
  }
}

and I have a string location = 'A.B.C[1]' which describes the location of the data I want.

Why can I not just do data = this.state[location].value ?

and is there a simple "JavaScript" way of getting the data using the location string?

any help would be amazing :)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
706 views
Welcome To Ask or Share your Answers For Others

1 Answer

You could split the path and reduce the object.

function getValue(o, path) {
    return path.replace(/[/g, '.').replace(/]/g, '').split('.').reduce(function (o, k) {
        return (o || {})[k];
    }, o);
}

var o = { A : { B: { C: [{ value: 'Brenda' }, { value: 'Jim' }, { value: 'Lucy' }] } }};

console.log(getValue(o, 'A.B.C[1]').value); // Jim
console.log(getValue(o, 'A.B.C[0].value')); // Brenda
console.log(getValue(o, 'Z[0].Y.X[42]'));   // undefined

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...