所以我在拉一个我想要“编辑”的对象,有一点帮助我有一个函数找到我正在寻找的项目并替换了值。在构建此项目时我没有考虑到的是项目是否尚不存在。
所以现在这个函数看起来像这样:
myFunction = function(moduleName, stateName, startVar){
//currentState brought in from factory controlling it
var currentState = StateFactory.current();
_.each(currentState, function(item) {
if (item.module === moduleName) {
_.each(item.customUrl, function(innerItem) {
if (_.has(innerItem, stateName)) {
innerItem[stateName] = startVar;
}
});
}
});
}
所以 - 假设它已经存在,这在替换startVar值方面做得很好。我需要添加一些级别的检查以确保项目存在(如果它们没有添加它们)。
因此,作为参考,这就是currentState的样子
[{
"module": "module1",
"customUrl": [
{ "mod1": "2" },
{ "mod2": "1" }
]
}, {
"module": "module2",
"customUrl": [
{ "mod3": "false" },
{ "mod4": "5" }
]
}
];
所以,如果我通过了
myFunction("module1","mod1",3);
这很有效,但是如果我通过
myFunction("module5","mod8","false");
或许可能介于两者之间
myFunction("module1","mod30","false");
此功能无法处理该情况。我可以用一些帮助缠绕我的头来解决这个问题。此外,我使用下划线(如果需要帮助)。感谢您抽出宝贵时间阅读!
正如Phari所提到的 - 这就是
的影响 currentState[moduleName].customUrl[stateName] = startVar;
我原以为我可以创建对象而只是_.extend,但因为它是一个对象数组不能正常工作。
这就是我的意思:
var tempOb = {"module" : moduleName, "customUrl" : [{stateName : startVar}]};
_.extend(currentState, tempOb);
对于一组对象不能正常工作。
答案 0 :(得分:1)
您似乎需要删除if
语句:
if (_.has(innerItem, stateName)) {
innerItem[stateName] = startVar;
}
应该变得简单:
innerItem[stateName] = startVar;
然后,如果该属性不存在,则会添加该属性。如果它已经存在,它将被覆盖。
编辑:处理最高级别的缺席:
myFunction = function(moduleName, stateName, startVar){
//currentState brought in from factory controlling it
var currentState = StateFactory.current();
var found = false;
_.each(currentState, function(item) {
if (item.module === moduleName) {
found = true;
_.each(item.customUrl, function(innerItem) {
if (_.has(innerItem, stateName)) {
innerItem[stateName] = startVar;
}
});
}
});
if ( ! found ) {
var newItem = {
module: moduleName,
customUrl: []
};
var newInnerItem = {};
newInnerItem[stateName] = startVar;
newItem.customUrl.push(newInnerItem);
currentState.push(newItem);
}
}