仅当值不为空时才推送 Javascript 数组

新手上路,请多包涵

我想知道以下事情是否以及如何运作:

我有一个如下定义的数组:

 var array = [
  {number: '1', value: 'one', context: 'someContext'},
  {number: '2', value: 'two', context: 'anotherContext'},
  ...
]

我目前正在做的是将元素推入数组,所以 array.push({number: '1', value: 'one', context: 'someContext'}); 等等,每个数组元素。

现在这个东西被扩展了:假设有另一个键叫做’content’。此键有一个适当的值,即未定义或字符串。现在的问题是:如果我将推送放入这样的函数中:

 push(number, value, context, content) {
    array.push({
       number: number,
       value: value,
       context: context,
       content: content
    })
}

无论如何,我可以确定,如果内容(函数作为参数获取)不为空,则关键内容仅添加到元素中。

当然我可以这样修改函数:

 push(number, value, context, content) {
    if(!content) {
        array.push({
           number: number,
           value: value,
           context: context,
           content: content
       })
    } else {
        array.push({
           number: number,
           value: value,
           context: context
        })
   }
}

但问题是,在推送功能中是否有办法做到这一点。我也想过类似的事情

array.push({
  number: number,
  value: value,
  context: context,
  content? content: content
})

因此,只有在定义了内容时才会插入它,但这是否有效,看起来并不像,但也许我的代码中存在错误。

原文由 user5638730 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 292
2 个回答

如果目标不仅仅是让代码更短,那么可读性最高的代码应该是这样的,您可以在其中创建对象,如果有值则添加属性,然后将对象推送到数组。

 push(number, value, context, content) {

    var o = {
        number  : number,
        value   : value,
        context : context
    }

    if (content !== null) o.content = content;

    array.push(o);
);

这是一种直接在 Array.push 内部构造对象的 ES6 方法,并过滤任何具有 null 作为值的对象。

 function push(...arg) {
    array.push(['number','value','context','content'].reduce((a,b,i)=> {
        if (arg[i] !== null) a[b]=arg[i]; return a;
    }, {}))
}

原文由 adeneo 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用对象文字的 Spread 运算符(ECMAScript 2018),它看起来非常简单:

 const myPush = (number, value, context, content) =>
  array.push({
    ...{ number, value, context },
    ...content && { content }
  });

原文由 dhilt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题