javascript - 使用变量动态设置多个对象属性

标签 javascript object ecmascript-6 ecmascript-2016

我想设置多个对象属性具有相同的值。

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_DIALOGSHOW_PAYMENT_DIALOG 分配处理程序

有没有办法通过 js api 快速动态设置它,但不需要引入新函数来处理这个问题

const object = {
      [SHOW_BUSINESS_DIALOG, SHOW_PAYMENT_DIALOG]: handler,
    };

最佳答案

如果您同意对 handler 使用相同的引用,则可以将 Object.fromEntries().map() 一起使用每个值...(代码片段控制台输出显示处理程序方法对于每个值都是相同的引用,这就是为什么它看起来有点奇怪):

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但是,我认为对于这种情况,使用带有 Set 的通用 if 语句(使用 .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

关于javascript - 使用变量动态设置多个对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57068396/

相关文章:

javascript - 如何加载外部 XML 以将数据导入 Phonegap 应用程序

javascript - 数组/对象解构

java - 添加java对象两次

reactjs - 错误: Minified React error #130

javascript - webpack 与 uglify 结合 sass 加载器会出错,否则工作正常

javascript - Asp mvc 和 Ajax 中的自动完成

javascript - 如果无法访问原始代码,是否有 html 或 js 代码为 GoDaddy 模板发送按钮提供视觉焦点

javascript - 按字段名称将 JS 数组行移动到新的 JS 过滤数组中

javascript - 使用另一个数组更新对象数组

javascript - 如何调试用 ES6 编写的模态插件的源代码?