你可以通过构造函数在javascript中创建一个值数组,其中有条件地生成值吗?

时间:2017-12-20 14:05:53

标签: javascript arrays list arraylist

不知道怎么说这个但是说我正在尝试创建一个字符串数组,并且每个字符串的存在取决于条件

我现在正在做的是

somelist = [
    true ? 'foo' : null,
    false ? 'bar' : null
]

因为我不想给错误的条件赋予任何价值,但我能想出的唯一方法是给它们所有的空值。

我知道我可以为每个人做一个if语句并推送它,如果是这样,但也许有更好的方法?

我只是想出了一种解决方案。

somelist = somelist.filter(value => value !== null)

但还有更短的路吗?

2 个答案:

答案 0 :(得分:0)

如果您控制数据,则应使用if语句并有条件地将数据推送到数组。循环遍历数组以过滤掉您添加的空值是没有意义的。

如果您不控制数据,则会在removing empty elements

上提出此问题

如果你的死人使用构造函数javascript,你可以做一些有趣的事情,比如扩展数组

class NoNullArray extends Array{
     constructor(...elements){
         super(...elements.filter(element=>element !== null))
     }
}

var somelist = new NoNullArray(
true ? 'foo' : null,
false ? 'bar' : null
);

答案 1 :(得分:0)

也许有点hacky,但你可以做到

//define condition-value pairs
let somelist = [
  true, 'foo',
  false, 'bar',
  //...
]
//filter the odd indices that are preceeded by a truthy value
.filter((v,i,a) => i&1 && a[i-1]);
这样,您可以摆脱三元操作并首先编写null - 值