我试图在Javascript / Jquery中获得类似PHP的功能,我们传递值的地址(& $ value)并在PHP的实际数组结构中编辑它的值。例如,我有一个以下格式的对象,
var obj = {
"first": "first value",
"second": "second value",
"third": "third value",
"fourth": {
"a": "good word",
"b": "bad word"
}
}
Array / Object可以是单维或多维的。我想迭代给定的数组/对象结构并修改它并返回实际的结构。
var obj = {
"first": "modified value",
"second": "second value",
"third": "third value",
"fourth": {
"a": "good word",
"b": "censored word"
}
}
提前致谢!
答案 0 :(得分:1)
这会递归地将函数应用于嵌套对象:
transform = function(obj, fun) {
if (typeof obj != "object")
return fun(obj);
Object.keys(obj).forEach(function(k) {
obj[k] = transform(obj[k], fun);
});
return obj;
}
用法:
transform(yourData, function(val) {
if (val.replace)
return val.replace(/bad/g, "censored");
else
return val;
})
答案 1 :(得分:0)
您可以使用for in loop迭代JS对象。
以下是文档中的示例:
var o = {a:1, b:2, c:3};
function show_props(obj, objName) {
var result = "";
for (var prop in obj) {
result += objName + "." + prop + " = " + obj[prop] + "\n";
}
return result;
}
alert(show_props(o, "o")); /* alerts: o.a = 1 o.b = 2 o.c = 3 */
答案 2 :(得分:0)
此解决方案仅适用于对象({}
),如果您确实需要包含数组([]
),请告诉我们:
function searchAndDestroy(o, word, replacement) {
var value, type;
for (var k in o) {
value = o[k];
type = Object.prototype.toString.call(value);
if (type === '[object Object]') {
searchAndDestroy(value, word, replacement);
} else if (type === '[object String]') {
o[k] = value.replace(new RegExp(word, 'g'), replacement);
}
}
return o;
}
用法:
var sanitized = searchAndDestroy(obj, 'bad word', 'censored word');
您需要了解的内容:
[]
)。{}
)。{}
)和数组([]
)总是通过引用传递,没有办法改变它。因此,关于上述用例,sanitized
等于obj
。