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