Javascript 下划线、查找和更改对象中的值
我试图在对象的函数中查找并替换一个值 我的对象如下所示:Javascript 下划线、查找和更改对象中的值,javascript,underscore.js,Javascript,Underscore.js,我试图在对象的函数中查找并替换一个值 我的对象如下所示: var testStates = [{ "module": "module1", "customUrl": [ { "mod1": "2" }, { "mod2": "1" } ] }, { "module": "module2", "customUrl": [ { "mod3": "false" }, { "mod4": "5" }
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是一个“module”值,name是一个“mod”的键(比如示例中的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" }
]
}
];
有点像在对象上查找和替换。我不知道如何用下划线来处理这个问题,希望能得到一些帮助!谢谢你的阅读 首先,需要传入要处理的对象,因此函数的签名应该是:
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;
}
});
}
});
}
还有一个简单的测试。单击右上角的JS Bin中的编辑,您应该会在控制台中看到结果。是否真的需要使用下划线?我宁愿用纯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));
当然没有必要使用它,但我现在正在使用它,所以我想看看我是否可以利用它:)选择对你和项目最有意义的,现在你有了更多的选择,也许你可以运行一个基准测试,看看什么更快,诸如此类。你知道,只是为了炫耀:D