我想设置多个具有相同值的对象属性。
const SHOW_PAYMENT_DIALOG = 'SHOW_PAYMENT_DIALOG';
const SHOW_BUSINESS_DIALOG = 'SHOW_BUSINESS_DIALOG';
const handler = (state, payload) => {
return {
...state,
data: payload
};
};
const object = {
[SHOW_BUSINESS_DIALOG]: handler,
[SHOW_PAYMENT_DIALOG]: handler,
};
如上例所示,我必须为2个属性SHOW_BUSINESS_DIALOG
和SHOW_PAYMENT_DIALOG
手动分配处理程序
是否可以通过js api快速即时设置,但无需引入新功能来处理此类问题
const object = {
[SHOW_BUSINESS_DIALOG, SHOW_PAYMENT_DIALOG]: handler,
};
答案 0 :(得分:2)
如果可以确定对每个值使用相同的对Object.fromEntries()
的引用,可以将.map()
与handler
一起使用(代码段控制台输出显示处理程序方法是如何每个值都有相同的引用,这就是为什么它看起来有点奇怪的原因):
const SHOW_PAYMENT_DIALOG = 'SHOW_PAYMENT_DIALOG';
const SHOW_BUSINESS_DIALOG = 'SHOW_BUSINESS_DIALOG';
const handler = (state, payload) => {
return {
...state,
data: payload
};
};
const keys = [SHOW_PAYMENT_DIALOG, SHOW_BUSINESS_DIALOG];
const object = Object.fromEntries(keys.map(k => [k, handler]));
console.log(object);
请注意,.fromEntries()
当前在draft mode中,但是,我认为在这种情况下,将通用if
语句与Set一起使用(使用.has()
)会更好比使用对象:
const SHOW_PAYMENT_DIALOG = 'SHOW_PAYMENT_DIALOG';
const SHOW_BUSINESS_DIALOG = 'SHOW_BUSINESS_DIALOG';
const handler = (state, payload) => {
return {
...state,
data: payload
};
};
const get_handler = key => {
const keys = new Set([SHOW_PAYMENT_DIALOG, SHOW_BUSINESS_DIALOG]);
if(keys.has(key))
return handler;
}
console.log(get_handler(SHOW_BUSINESS_DIALOG)); // hanlder
console.log(get_handler("foo")); // undefined
答案 1 :(得分:1)
您可以创建一个泛型函数并传递键数组,并通过keyArr
循环并为每个键放置值
const SHOW_PAYMENT_DIALOG = 'SHOW_PAYMENT_DIALOG';
const SHOW_BUSINESS_DIALOG = 'SHOW_BUSINESS_DIALOG';
let value = "some value"
const object = { someKey: 'value'};
let dynamicSetValues = (keyArr, value) => {
keyArr.forEach(key => {
object[key] = value
})
}
dynamicSetValues(['SHOW_PAYMENT_DIALOG','SHOW_BUSINESS_DIALOG'], value)
console.log(object)
注意:- 这会改变原始对象,如果您希望保持不变性,则可以复制对象并将值放在所需的键上,并每次从功能