2017-07-04 10 views
5

我该如何定义条件数组元素? 我想要做这样的事情:如何用条件元素定义数组?

const cond = true; 
const myArr = ["foo", cond && "bar"]; 

此按预期工作:["foo", "bar"]

但如果我设置condfalse,我得到以下结果:["foo", false]

我怎么能定义一个具有条件元素的数组?

+0

尝试使用if(cond){myArr。推(“酒吧”)} –

+0

你将需要使用推功能或删除所有空条目'cond? “bar”:null'。 – NtFreX

+1

不管你用这个语法做什么,它至少会添加一个'undefined'。 – Jankapunkt

回答

7

您可以传播的数组的一个数组里面,以保持项目阵列干净,当条件为false

// Will result in ['foo', 'bar'] 
 
const items = [ 
 
    'foo', 
 
    ... true ? ['bar'] : [], 
 
    ... false ? ['bar'] : [], 
 
] 
 

 
console.log(items)

1

您可以尝试使用简单的,如果:

if(cond) { 
    myArr.push("bar"); 
} 
1

你根本就没有使用push其他这么多的选择:

const cond = true; 
const myArr = ["foo"]; 

if (cond) myArr.push("bar"); 

另一个想法是有可能加入空的,并筛选出来:

const cond = true; 
const myArr = ["foo", cond ? "bar" : null]; 

myArr = myArr.filter((item) => item !== null); 
2

如果你真的想要为了保持它作为一个班轮,你可以使用:

const cond = true; 
const myArr = ["foo"].concat(cond ? ["bar"] : []); 
1

有几种不同的方式,但你这样做的方式将不会真正用于Javascript。

最简单的解决方案是只有一个if语句。

if (myCond) arr.push(element); 

还有filter,但我不认为这是你想要的这里可言,因为你似乎是想为“添加这样一两件事,如果这一个条件为真”,而不是检查,对一切一些条件。虽然,如果你想变得非常怪异,你可以做到这一点(不会推荐,但它可以很酷)。

var arr = ["a", cond && "bar"]; 
arr.filter(e => e) 

基本上它只会过滤掉所有的非真值。

+0

这看起来很酷。你也可以做'var arr = [“a”,cond &&“bar”]。filter(e => e);'@Adam LeBlanc,但你说得对,可能是垃圾。但很酷的垃圾;) –

+0

这很酷,但我会建议反对它只有一个条件值。它更适合一般用途“摆脱所有虚假价值”类型的东西。因为你只是想通过整个数组来获得一个值。但是如果你有一个未定数量的条件值,那么这可能是一个好的解决方案。 –

1

替代做法:前置过滤器填充的,而不是后过滤:

const populate = function(...values) { 
    return values.filter(function(el) { 
     return el !== false 
    }); 
}; 

console.log(populate("foo", true && "bar", false && "baz")) 

返回

(2) ["foo", "bar"] 

我知道,没有解决不了的速记符号(因为它不会工作,不管什么你尝试)但它接近于此。

0

我会做这个

[ 
    true && 'one', 
    false && 'two', 
    1 === 1 && 'three', 
    1 + 1 === 9 && 'four' 
].filter(Boolean) // ['one', 'three']