我正在尝试查找并替换对象中函数的值
我的对象如下:
var testStates = [{
"module": "module1",
"customUrl": [
{ "mod1": "2" },
{ "mod2": "1" }
]
}, {
"module": "module2",
"customUrl": [
{ "mod3": "false" },
{ "mod4": "5" }
]
}
];
我的功能是这样的:
myFunction = function(mod, name, replace){
//replace item in testStates
}
基本上我试图做的就是使用那些变量来搜索内部mod是"模块" value,name是" mod"的键(如exampels中的mod1或mod2),replace是要在所选mod上替换的值。
所以,如果我说
myfunction(module1, mod1, 5);
然后我想让对象看起来像
var testStates = [{
"module": "module1",
"customUrl": [
{ "mod1": "5" }, ////Changed
{ "mod2": "1" }
]
}, {
"module": "module2",
"customUrl": [
{ "mod3": "false" },
{ "mod4": "5" }
]
}
];
有点像在对象上查找和替换。我不知道如何用下划线来解决这个问题,我会非常乐意为您提供帮助!谢谢你的阅读!
答案 0 :(得分:1)
首先,您需要传入要处理的对象,因此您的函数的签名将是:
function myfunction (obj, mod, name, replace) {
// Code
}
这个想法很简单:
迭代数组中的对象,如果模块名称与所需的模块名称相同,则检查customUrl
的键以查找指定的键并将其替换为新值。
这是完整的功能:
function myfunction (obj, mod, name, replace) {
_.each(obj, function(item) {
if (item.module === mod) {
_.each(item.customUrl, function(innerItem) {
if (_.has(innerItem, name)) {
innerItem[name] = replace;
}
});
}
});
}
here is a jsbin也有一个简单的测试。点击右上角的在JS Bin中编辑,您应该会在控制台标签中看到结果。
答案 1 :(得分:1)
是否真的有必要使用下划线?我宁愿用纯Javascript来做。这是一个更改已发送集合的工作示例。
var testStates = [
{
"module": "module1",
"customUrl": [
{ "mod1": "5" },
{ "mod2": "1" }
]
},
{
"module": "module2",
"customUrl": [
{ "mod3": "false" },
{ "mod4": "5" }
]
}
];
var myFunction = function(collection, mod, name, replace){
var module, customUrl;
module = collection.filter(function (elem) {
return elem.module === mod;
})[0];
if (!module) {
return collection;
}
customUrl = module.customUrl.filter(function (url) {
return (typeof(url[name]) !== 'undefined')
})[0];
if (!customUrl) {
return collection;
}
customUrl[name] = replace;
return collection;
}
var returning = myFunction(testStates, 'module2', 'mod4', 'I changed this');
console.log(JSON.stringify(returning));
console.log(JSON.stringify(testStates));