【问题标题】:JavaScript: Compressing object assignment for different casesJavaScript:针对不同情况压缩对象分配
【发布时间】:2017-12-08 00:31:23
【问题描述】:

我正在尝试根据特定情况设置对象的属性。我认为可以压缩以下代码,我正在寻找最好的方法。

注意:我考虑过使用 switch 语句,但它产生的行数几乎相同。

let oNoificationData = {};
if (data.type === 'newUser') {
    oNotificationData = {
        title: `${data.user} is online!`,
        icon: `https://www.gravatar.com/avatar/${sHash}?d=mm`,
        body: 'A new user has come online',
    };
} else if (data.type === 'logoff') {
    oNotificationData = {
        title: `${data.user} has logged out!`,
        icon: `https://www.gravatar.com/avatar/${sHash}?d=mm`,
        body: 'A user has logged out'
    };
} else if (data.type === "newMsg") {
    oNotificationData = {
        title: `new message from ${data.user}`,
        icon: `https://www.gravatar.com/avatar/${sHash}?d=mm`,
        body: 'You have a new message!'
    };
} else if (data.type === "closeRoom") {
    oNotificationData = {
        title: `${data.user} has left the chat`,
        icon: `https://www.gravatar.com/avatar/${sHash}?d=mm`,
        body: 'Chat user has left'
    };
}

【问题讨论】:

  • 你可以创建一个对象并引用它,最终它的行数几乎相同。

标签: javascript object duplicates summarization


【解决方案1】:

所以使用一个对象

var notifications = {
  newUser : {
    title: `${data.user} is online!`,
    icon:`https://www.gravatar.com/avatar/${sHash}?d=mm`,
    body: 'A new user has come online',
  },
  logoff : {
    title: `${data.user} has logged out!`,
    icon:`https://www.gravatar.com/avatar/${sHash}?d=mm`,
    body: 'A user has logged out'
  }
}

它只是

var obj = notifications[data.type];

【讨论】:

  • 不错!这将导致相同数量的代码正确,这样做有好处吗?
  • 代码字符的数量更少,并且没有所有的复制和粘贴更干净。你不会得到任何更少的线条......
  • @epascarello 看起来图标都是一样的。也许你可以减少它,只是一个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多