使用虚线字符串创建javascript对象
Create javascript object using dotted string
想象一下我有一些javascript对象,例如var person={};
我得到了一个字符串,它表示对该对象的点遍历,例如"Address.Suburb"
以及表示要设置的值的另一个字符串。例如"Your Town"
可以设置的通用功能是什么。在调用之前,属性可能存在,也可能不存在,函数需要以在必要时创建属性。
function MySetter(object, stringTraversal, valueToSet) {
....
}
使得
var person = {};
MySetter(person, "Address.Suburb", "CrazyTown")
alert(person.Address.Suburb); // alerts CrazyTown
谢谢。
尝试:
function setObjPath(obj,path,value){
var parts = path.split('.'), part;
function error(txt){
throw new TypeError(txt);
}
while (part = parts.shift()){
if (parts.length){
obj = part in obj && obj[part] instanceof Object
? obj[part]
: part in obj
? error('key ['+part+'] exists but is not an object')
: (obj[part] = {}, obj[part]);
} else {
obj[part] = value;
}
}
}
// usage examples
var person = {name: {prename: {first:'Pete',full:'Pete Michael'}}};
setObjPath(person, 'name.surname.first','Johansen');
alert(person.name.prename.first +' '+person.name.surname.first);
//=> Pete Johansen
setObjPath(person, 'name.prename.first','George');
alert(person.name.prename.first+' '+person.name.surname.first);
//=> George Johansen
setObjPath(person, 'name.prename.first.isset',true);
//=> throws TypeError
很抱歉命名不正确
function MySetter(obj, path, value){
var paths = path.split(".");
var path;
var ans;
for(var i in paths) {
obj = obj[paths[i]];
};
return ans;
}
编辑:我误解了这个问题。这将返回字符串路径中的值,您想设置它吗?
function MySetter(object, string, value) {
if (typeof string === 'string') {
string = string.split('.');
}
if (typeof object[string[0]] === 'object')
return MySetter(object[string[0]], string.slice(1), value);
else
return object[string[0]];
}
那就行了!
编辑:是的,我也误解了…
function MySetter(object, string, value) {
if (typeof string === 'string') {
string = string.split('.');
}
if (string.length === 2) {
object[string[1]] = value;
} else {
return MySetter(object[string[0]], string.slice(1), value);
}
}
您可以尝试编写自己的解析器。
function MySetter(object, stringTraversal, valueToSet) {
var prop = stringTraversal.split('.'),
len = prop.length,
obj = object,
attr = null;
for (var i = 0; i < len; i++) {
attr = prop[i];
if (i == len - 1) {
obj[attr] = valueToSet;
return;
}
if (!obj[attr] && i < len - 1) {
obj[attr] = {};
}
obj = obj[attr];
}
}
像这样的东西(没有时间测试)。
function MySetter(object, stringTraversal, valueToSet) {
var pieces = stringTraversal.split('.');
for(var i in pieces) {
var val = {};
if(i == pieces.length-1) {
val = valueToSet;
}
object[pieces[i]] = val;
object = object[pieces[i]];
}
}
var person = {};
MySetter(person, "Address.Suburb", "CrazyTown")
alert(person.Address.Suburb); // alerts CrazyTown
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值