我正在处理这个以JSON格式返回值的JS文件。 我需要在每个字符串值的开头和结尾添加一个成员函数@。我无法弄清楚如何做到这一点。文件的内容是这样的,但可能有任意数量的对象
var SomeText = function () {
return {
"CommonText":
{
"ViewAll": "View All",
"SignOut": "Sign out",
"More": "More",
"New": "New"
},
"ErrorText": {
"Tag": "Error !",
"EmptyGridMessage": "You do not have any {0}"
},
};
};
这里我需要在每个字符串值附加@。例如。对于标记/错误名称值对,我需要将其转换为“@Error!@”。
答案 0 :(得分:3)
这是一种使用递归的通用方法,与其他解决方案不同,它将更改对象中的所有字符串,无论它们处于什么级别:
var myObj = {
"CommonText":
{
"ViewAll": "View All",
"SignOut": "Sign out",
"More": "More",
"New": "New"
},
"ErrorText": {
"Tag": "Error !",
"EmptyGridMessage": "You do not have any {0}"
},
};
function deepStringConcat(myObj) {
function walker(obj) {
var k, has = Object.prototype.hasOwnProperty.bind(obj);
for (k in obj) if (has(k)) {
switch (typeof obj[k]) {
case 'object':
walker(obj[k]); break;
case 'string':
obj[k] = '@' + obj[k] + '@';
}
}
}
walker(myObj);
};
deepStringConcat(myObj);
console.log(myObj);
答案 1 :(得分:1)
这是我的解决方案,使用递归函数将@仅添加到字符串并迭代对象。
function appendAt (text) {
for (var t in text) {
if (text.hasOwnProperty(t) && typeof text[t] === "string") {
text[t] = '@' + text[t] + '@';
}
if (typeof text[t] === "object") {
appendAt(text[t]);
}
}
return text;
}
// run the function
var text = SomeText();
console.log(text); // normal output
appendAt(text);
console.log(text); // output with appended @ at begin/end of each string
答案 2 :(得分:1)
你可以尝试这样的事情。它只会改变你问题所示的第一级:
// get the object returned by SomeText
var output = SomeText();
// for each object property rewrite the value
// using the updateObject function
Object.keys(output).forEach(function (obj) {
output[obj] = updateObject(output[obj]);
});
function updateObject(obj) {
// for each property in the object, update the value
Object.keys(obj).forEach(function (el) {
obj[el] = '@' + obj[el] + '@';
});
return obj;
}