如何通过字符串访问对象成员
How can I access object members via a string?
假设我们得到一个javascript对象
var json = {
abc: 1,
def: 2,
ghi: [3, 4]
};
我们想访问它的成员,例如给定以下字符串数组
var str_arr = ["json['abc']", "json['ghi'][1]"];
我想在不使用eval的情况下得到以下结果(我正在构建一个谷歌Chrome扩展)
var str_res = [1, 4];
这可能吗?我试着做窗户,但不起作用(或者可能我不知道怎么做)。谢谢
我不建议使用自定义方法迭代整个对象,但如果你真的不能直接访问对象,你可以使用递归函数并传递你想要打开的键。这可能会给你更多你想要的动态感觉。
代码:
function readObjectValue(obj, key, defaultValue) {
function __readObjectValueInternal(obj, keyParts, defaultValue) {
if (!obj.hasOwnProperty(keyParts[0])) {
return defaultValue;
}
var readValue = obj[keyParts[0]];
if (typeof(readValue) !== 'object') {
return readValue;
}
return __readObjectValueInternal(readValue, keyParts.slice(1), defaultValue);
};
return __readObjectValueInternal(
obj,
(typeof(key) === 'string' ? key.split(/'./g) : key),
defaultValue
);
}
用法:
var json = {
abc: 1,
def: 2,
ghi: [3, 4]
};
console.log( readObjectValue(json, 'abc') ); // 1
console.log( readObjectValue(json, 'ghi.1') ); // 4
console.log( readObjectValue(json, 'ghi.2') ); // undefined
console.log( readObjectValue(json, 'ghi.3', null) ); // null
console.log( readObjectValue(json, ['def', 0], null) ); // 2
使用这个循环可以实现您所要求的
str_arr.forEach(function(string,index){
str_arr[index] = window.eval(string);
});
console.log(str_arr);
您可以尝试这个
var str_arr = [
(json['abc'])?json['abc']:undefined,
(json['ghi'][1])?json['ghi'][1]:undefined
];
相关文章:
- Javascript映射对象成员以返回新的扁平对象
- 控制台返回[Object-Object]而不是对象成员
- 如何使用正则表达式查找对象成员名称
- 如何在将值分配给对象成员时执行函数
- 在 Android 上返回 undefined 的 JavaScript 对象成员
- 从 Javascript 中的嵌套函数引用对象成员
- 调用对象成员 - JavaScript
- 对象成员的排序
- 节点.js的奇怪对象成员行为
- 访问具有字符串名称的对象成员
- 使用'[ ]'表示法而不是点表示法来访问javascript对象成员的原因是什么?
- 按字符串名称引用对象成员
- Javascript对象成员变量未克隆
- 对象成员并在JS中访问它们
- 如何通过字符串访问对象成员
- 创建的所有javascript对象成员都相等
- 对象成员函数的回调?(Javascript)
- 在面向对象的Javascript中,将对象成员方法传递给事件处理程序
- 在Javascript中创建和初始化对象成员的顺序
- 在JS中将对象数组中的对象成员值提取到它们自己的数组中的干净方法