json 如何从javascript中将字符串的链接属性转换为变量

yzxexxkh  于 2022-11-26  发布在  Java
关注(0)|答案(4)|浏览(124)

这个变量存储在一个字符串中

var employee  = {
        name: 'person',
        job: {
           post: 'developer',
           since: 2010,
           desk: {
              number: '1',
        }
    }
  };

如何从字符串中获取钥匙串值?

var variable = "job.desk.number";
  console.log(variable);
  //this should return 1

更新3!!
@ T. J.克劳德的回答其实是最好的答案。
他的功能是快速和整洁。:)霍里!

uxh89sit

uxh89sit1#

拆分字符串,得到一个键数组,然后循环遍历它们,依次从对象中获取每个键,记住从对象中获取的最后一个键:

var value = variable.split('.').reduce(function(prev, key) {
  return prev[key];
}, employee);
snippet.log(value);

示例:
第一次
注意Array#reduce是ES5的东西,所以它在所有现代的浏览器中都有,但在一些老的浏览器中没有。不过,它可以被填充。或者,如果你只是喜欢使用for循环:

var keys = variable.split('.');
var value = employee;
var index;
for (index = 0; index < keys.length; ++index) {
    value = value[keys[index]];
}
snippet.log(value);

示例:
第一个

6uxekuva

6uxekuva2#

例如,假设变量emplyee为

var employee = "{ name: 'person', job: { post: 'developer', since: 2010, desk: { number: '1', } } }";

这实际上是一个字符串,那么您需要使用JSON.parse(employee)将其解析为JSON
你可以访问你的变量

var variable = employee.job.desk.number

您的情况的替代方案是:

var variable = "" + employee.job.desk.number;
bttbmeg0

bttbmeg03#

结果实际上是工作,但我想知道性能。

var _getKeyChainValueFromObject = function (keychain, root) {
    var items = [];
    if (keychain.indexOf(".") > 0)
        items = keychain.split(".");
    else
        return root[keychain];

    for (var i = 0; i < items.length ; i++) {
        for (var property in root) {
            var key = items[i];
            if (property === key) {
                if (typeof (root[property]) === "object") {
                    var scope = root[property];
                    items.splice(0, 1);
                    //get the resource recursively 
                    return _getKeyChainValueFromObject(items.join('.'), scope);
                }
            }
        }
    }
};
1mrurvl1

1mrurvl14#

我发现了一个更好的解决方案,它可以处理对象和对象数组。

const userObject = {
  user: {
    name: "Victor",
    posts: [
      {
        title: "Post #1",
        description: "........"
      },
      {
        title: "Post #2",
        description: "........"
      }
    ]
  }
};

const path = "user.posts[0].title";

const valueByPath = path.match(/\d+|\w+/gm).reduce(function (prev, key) {
  return prev[key];
}, userObject);

console.log(valueByPath);

相关问题