Saya mencoba mengakses properti suatu objek menggunakan nama dinamis. Apakah ini mungkin?

const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; // The idea is to access something.bar, getting "Foobar!"
857
RichW 22 नवम्बर 2010, 14:23

5 जवाब

Ada beberapa kemungkinan:

const test = {
    prop1: {
      prop2: {
        prop3: "I'm very nested"
      }
    }

const test1 = test.prop1.prop2.prop3
const test2 = test['prop1']['prop2']['prop3']
const test3 = test['prop1.prop2.prop3'] //will return undefined
const test4 = _.get(test, 'prop1.prop2.prop3') //use lodash

Jika Anda ingin mendapatkan nilai bersarang secara dinamis (mis. Dengan variabel), opsi terbaik Anda adalah menggunakan lodash.

-1
BartusZak 4 अक्टूबर 2019, 14:49

यह मेरा समाधान है:

function resolve(path, obj) {
    return path.split('.').reduce(function(prev, curr) {
        return prev ? prev[curr] : null
    }, obj || self)
}

उपयोग के उदाहरण:

resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// or even use array indexes
// (someObject has been defined in the question)
resolve("part.0.size", someObject) 
// returns null when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
123
GeekyDeaks 23 सितंबर 2017, 14:45

Dalam Javascript kita dapat mengakses:

  • notasi dot - foo.bar
  • braket persegi - foo[someVar] atau foo["string"]

Tetapi hanya kasus kedua yang memungkinkan untuk mengakses properti secara dinamis:

var foo = { pName1 : 1, pName2 : [1, {foo : bar }, 3] , ...}

var name = "pName"
var num  = 1;

foo[name + num]; // 1

// -- 

var a = 2;
var b = 1;
var c = "foo";

foo[name + a][b][c]; // bar
45
Sonique 1 जुलाई 2014, 15:40

Anda bisa melakukannya seperti ini menggunakan lodash get

_.get(object, 'a[0].b.c');
12
JJJ 6 सितंबर 2018, 15:57
const something = { bar: "Foobar!" };
const foo = 'bar';

something[\`${foo}\`];
-4
Cody Gray 19 सितंबर 2017, 17:12