访问对象中的对象变量
Access object var in object
我有一个这样的对象...
"data": {
"1": {
"id": 32,
"name": "E",
"link": "",
},
"2": {
"id": 33,
"name": "EC",
"link": "",
},
}
如何使用上面的变量设置每个"链接"值? 例如,我想做一些类似的事情
"data": {
"1": {
"id": 32,
"name": "E",
"link": "id="+this.id+" and name="+this.name,
},
"2": {
"id": 33,
"name": "EC",
"link": "id="+this.id+" and name="+this.name,
},
要使对象像这样...
"data": {
"1": {
"id": 32,
"name": "E",
"link": "id=32 and name=E",
},
"2": {
"id": 33,
"name": "EC",
"link": "id=33 and name=EC",
},
我建议遍历属性并更改所需的项目。
var object = { data: { "1": { "id": 32, "name": "E", "link": "", }, "2": { "id": 33, "name": "EC", "link": "", } } };
Object.keys(object.data).forEach(function (k) {
object.data[k].link = 'id=' + object.data[k].id + ' and name=' + object.data[k].name;
});
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
我通常把它作为一个函数:
"data": {
"1": {
"id": 32,
"name": "E",
"get_link": function() { return "id="+this.id+" and name="+this.name }
}
}
然后你像whatever.get_link()
一样访问它
有两种方法可以解决这个问题。
您可以创建后处理器来处理占位符值。我做了一个通用的预处理器,它应该动态搜索所有字符串属性的占位符。
var linkStore = {
"data": {
"1": {
"id": 32,
"name": "E",
"link": "id={{id}} and name={{name}}"
},
"2": {
"id": 33,
"name": "EC",
"link": "id={{id}} and name={{name}}"
}
}
};
function postProcess(data, root) {
var records = root != null ? data[root] : data;
Object.keys(records).forEach(function(recordId) {
var record = records[recordId];
Object.keys(record).forEach(function(property) {
if (typeof record[property] === 'string') {
record[property] = record[property].replace(/{{('w+)}}/g, function(match, value) {
return record[value];
});
}
});
});
return data;
}
var result = postProcess(linkStore, 'data');
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre>';
或者,如果您不想修改原始数据。您可以添加要应用于每个记录的属性映射。
var linkStore = {
"data": {
"1": {
"id": 32,
"name": "E",
"link": ""
},
"2": {
"id": 33,
"name": "EC",
"link": ""
}
}
};
function postProcess(data, root, propertyMap) {
var records = root != null ? data[root] : data;
Object.keys(records).forEach(function(recordId) {
var record = records[recordId];
Object.keys(propertyMap).forEach(function(property) {
record[property] = propertyMap[property].call(record, record[property]);
});
});
return data;
}
var result = postProcess(linkStore, 'data', {
link : function(oldValue) {
return 'id=' + this.id + ' and name=' + this.name
}
});
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre>';
相关文章:
- 如何在HTML中显示服务器对象变量
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- Javascript 方法看不到对象变量
- JavaScript对象范围-在对象方法中使用对象变量
- 将对象(变量)传递给angularjs指令
- 对象变量在 JavaScript 中是不可访问的
- 无法访问公共JavaScript对象变量
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- Javascript:如何在回调中设置父对象变量
- 从方法内部设置对象变量
- 访问对象中的对象变量
- JavaScript 中的对象变量
- 从 json 代码中删除 javascript 对象变量名称文本
- 将变量传递到对象变量中
- JavaScript 如何重新识别事件对象变量
- 从对象变量中获取子节点
- 使对象变量在所有“更深”的范围内都是可访问的
- 从方法 JavaScript 访问对象变量
- 如何在 javascript 中保存对象变量的状态
- 无法访问IE和Mozilla中javascript的类对象变量