js对象的属性名是变量,除了使用eval,还有没有别的方式获取属性值

例如,有一个对象:


var china={

    beijing:{

        chaoyang:{

            number:1234

        }

    }

}

现有一拼凑出的变量:


var key = "beijing.chaoyang.number"

所以可以通过


eval("china."+key)

来获取number。


想知道除了eval之外,有没有其他方法实现相同效果。


使用slice的方式将字符串分隔成["beijing","chaoyang","number"],然后用china"beijing"["number"]的方法倒可行,但实际情况是层级不是固定的,需要增加多个判断,所以暂不考虑。


沧海一幻觉
浏览 888回答 4
4回答

ibeautiful

const getDeepValue = (p, o) => p.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, o);var china={    beijing:{        chaoyang:{            number:1234        }    }}console.log(getDeepValue(['beijing', 'chaoyang', 'number'], china));  //1234

慕哥6287543

你可以通过var obj = {};obj[key+'xxxx'] = 'vvvvvvvvvvvv';来调用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript