从json拉一个深层的财产,而不使用lodash得到

所以我们有一个样本json

{ "name": "app", "version": "0.1.0", "description": "Sample description", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "some git url" }, "keywords": [ "node" ], "author": "Anonymous", "license": "ISC" } 

这里是我们的node.js脚本

 var obj = require('./package.json'); console.log(obj[process.argv[2]]); 

当我执行node getval.js version ,它的作品。 但是,当我执行node getval.js repository.url ,我得到未定义。

当我将代码更改为下面的代码时,它可以工作。 但是,我不想对关键值进行硬编码

 console.log(obj['repository']['url']); 

给定一个对象obj和一个"repository.url" key ,你可以得到深度值

 var val = key.split(".").reduce((o,k)=>o[k],obj); 

示范:

 var obj = { "name": "app", "version": "0.1.0", "description": "Sample description", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "some git url" }, "keywords": [ "node" ], "author": "Anonymous", "license": "ISC" }; var key = "repository.url"; var val = key.split(".").reduce((o,k)=>o[k],obj); document.write("result: \"" + val + "\""); 

你可以把钥匙分开. 在对象上访问它们之前

 var keys = argv[2].split('.'); var result = obj; keys.forEach(function(key){ result = result[key] }); return result;