如何将字符串中的链式属性转换为javascript中的变量
How to convert chained property from string into a variable from javascript
我有一个存储在字符串中的变量
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.克劳德的答案实际上是最好的答案。
他的工作既快捷又整洁太可怕了!
拆分字符串,使您有一个键数组,然后循环遍历它们,依次从对象中获取每个键,记住从对象中获得的最后一件事:
var value = variable.split('.').reduce(function(prev, key) {
return prev[key];
}, employee);
snippet.log(value);
示例:
var employee = {
name: 'person',
job: {
post: 'developer',
since: 2010,
desk: {
number: '1',
}
}
};
var variable = "job.desk.number";
var value = variable.split('.').reduce(function(prev, key) {
return prev[key];
}, employee);
snippet.log(value);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
请注意,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);
示例:
var employee = {
name: 'person',
job: {
post: 'developer',
since: 2010,
desk: {
number: '1',
}
}
};
var variable = "job.desk.number";
var keys = variable.split('.');
var value = employee;
var index;
for (index = 0; index < keys.length; ++index) {
value = value[keys[index]];
}
snippet.log(value);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
例如,假设您的变量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;
结果确实有效,但我想知道性能如何。
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);
}
}
}
}
};
我找到了一个更好的解决方案,可以处理对象和对象数组。
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);
相关文章:
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 将地理编码结果转换为php变量以发布到mysql数据库
- 如何在html中将字符串转换为数字?以及如何将变量传递到scriptlet代码中
- 将标量变量转换为javascript中包含变量的数组
- 使用Javascript将多行变量转换为单行变量
- 如何将JSON数据转换为变量,解析并输出为HTML
- 在Javascript中将条件语句转换为变量
- JavaScript将字符串转换为变量名
- 变量转换为另一个“未定义”的变量
- 将angular变量{{$index+1}}转换为javascript整数
- 如何在javascript中将String变量转换为int
- 为什么 Javascript 在变量赋值时将 null 转换为字符串
- 使用 JSON.parse 将字符串(变量)转换为对象,错误意外标记
- 提交时将JavaScript变量转换为PHP表单
- 如何在basil.js中将.txt字符串转换为变量
- 从外部javascript文件读取var并将其转换为php变量
- Javascript将字符串转换为变量递归
- 如何将HTML中的值转换为PHP变量
- 在d3.js中将局部变量转换为全局变量
- 每个部分附加一次多个链接转换变量