var flagsObj = {
logical1Flag: false,
operator1Flag: false,
resourceLeftFlag: false,
resource1Flag: false,
resourceRightFlag: false,
};
在上面的对象中,我想改变其中任何一个的值并使其成为真,其余的我想让它变为假。我已经使用了下面提到的这个函数,但是我可以使用map值或foreach函数更改值,但原始的flagsobj没有得到更改。
function settingFlag(val, keyF) {
const trueVal = val;
const falseVal = false;
const assignedKey = keyF;
_.mapValues(this.flagsObj, (value, key) => {
if (key === assignedKey) {
value = true;
} else {
value = false;
}
// console.log(value);
console.log(`
Flags
====
key ${key} value ${value}
`);
});
或使用forEach来操纵数据
_.forEach(this.flagsObj, (value, key) => {
if (key === assignedKey) {
value = true;
console.log(`
flags
=====
key ${key} value ${value}
`);
} else {
value = false;
}
});
console.log('::::: FLAGS :::: ', flagsObj);
}
foreach或map值都在改变所需的值,但原始的flagsObj没有改变。
任何能解决问题的lodash功能都值得赞赏。我正在使用angular 1.5 es6应用程序
答案 0 :(得分:3)
不确定lodash,但普通js中的一个班轮将会这样做
var flagsObj = {
logical1Flag: false,
operator1Flag: false,
resourceLeftFlag: false,
resource1Flag: false,
resourceRightFlag: false,
};
function change(obj, key) {
return Object.keys(obj).forEach(v => obj[v] = v === key);
}
change(flagsObj, "logical1Flag");
console.log(flagsObj);
答案 1 :(得分:0)
你需要退货:
function settingFlag(val, keyF) {
const trueVal = val;
const falseVal = false;
const assignedKey = keyF;
return _.mapValues(this.flagsObj, (value, key) => {
if (key === assignedKey) {
value = true;
} else {
value = false;
}
return value;
});
}
根据lodash docs:
返回新的映射数组。
它不会改变原来的那个。
你_.forEach
一个,首先,你应该只在一个数组上使用它(你在一个对象上使用它)。它可能在技术上有效,并且为了论证,即使您使用forEach
,设置value = true
也只设置变量,而不是对象的属性。您需要this.flagsObject[key] = // true or false
。
答案 2 :(得分:0)
您可以使用简单的for迭代对象的键,并将值设置为与指定的键匹配的键,否则为false:
var flagsObj = {
logical1Flag: false,
operator1Flag: false,
resourceLeftFlag: false,
resource1Flag: false,
resourceRightFlag: false,
};
function settingFlag(val, keyF) {
for (var key in flagsObj) {
flagsObj[key] = (key === keyF) ? val : false;
}
}
settingFlag(true, 'operator1Flag');
console.log(flagsObj);
答案 3 :(得分:0)
根据您要做的事情,可能会有一种更简单的方法。如果一次只有一个标志可以为真,那么你只是想设置哪个;
this.flags = ['logical1', 'operator1', 'resourceLeft', 'resource1', 'resourceRight'];
this.currentFlag = -1;
然后,要设置当前标志,执行this.currentFlag = this.flags.findIndex(a => a === keyF)
,并获取当前设置的标志,请执行this.flags[this.currentFlag]
。这比每次迭代对象更有效,并保持简洁。
答案 4 :(得分:0)
易于;使用obj
forEach
参数
_.forEach(this.flagsObj, (value, key, obj) => {
obj[key] = key === assignedKey
});
答案 5 :(得分:0)
解决此问题的一种方法是将原始Pair
存储为常量或重置对象,您可以使用它来恢复所有标志的public int compareTo(Pair<K, V> o) {
V val1 = o.getValue();
V val2 = this.getValue();
return val1.compareTo(val2);
}
。将其分配给flagsObj
,请确保使用lodash#clone
克隆它,以避免改变false
变量。接下来是创建一个接受我们设置为true的标志的函数;我们使用lodash#assign
将所有值从flagsObj
分配到ORIGINAL_FLAG_OBJECT
以将所有标志修改为false,然后使用lodash#set
来设置该特定{{1}键为true。
ORIGINAL_FLAG_OBJECT
flagsObj
flag