Как определить массив с условными элементами?
как я могу определить элементы условного массива?
Я хочу сделать что-то вроде этого:
const cond = true;
const myArr = ["foo", cond && "bar"];
это работает как ожидалось: ["foo", "bar"]
Но если я устанавливаю cond
в false
, я получаю следующий результат: ["foo", false]
Как я могу определить массив с условным элементом?
Ответы
Ответ 1
Вы можете распространять массив внутри массива, чтобы сохранить массив элементов в чистоте, когда условие false
.
Вот как вы можете это сделать:
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
console.log(items)
Ответ 2
Я бы сделал это
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
Обратите внимание, что это также удалит ложные значения, такие как пустые строки.
Ответ 3
Вы можете попробовать с простым, если:
if(cond) {
myArr.push("bar");
}
Ответ 4
Если вы действительно хотите сохранить его как один лайнер, вы можете использовать:
const cond = true;
const myArr = ["foo"].concat(cond ? ["bar"] : []);
Ответ 5
У вас не так много вариантов, кроме использования 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);
Ответ 6
Есть несколько разных способов, но способ, которым вы это делаете, не будет работать для Javascript.
Самое простое решение - просто иметь оператор if.
if (myCond) arr.push(element);
Там также filter
, но я не думаю, что вы вообще этого хотите, поскольку вы, кажется, собираетесь "Добавить это одно, если это одно условие истинно", а не проверять все на какое-то условие, Хотя, если вы хотите стать действительно причудливым, вы можете это сделать (не рекомендую, но это круто, что вы можете).
var arr = ["a", cond && "bar"];
arr.filter( e => e)
В принципе, он просто отфильтрует все неверные значения.
Ответ 7
Однострочник с ES6;
arr = [
"Hello",
"World",
...(true && ["conditional element"])
]
Ответ 8
Альтернативный подход: предварительный фильтр заполняется вместо фильтрации по почте:
const populate = function(...values) {
return values.filter(function(el) {
return el !== false
});
};
console.log(populate("foo", true && "bar", false && "baz"))
Возвращает
(2) ["foo", "bar"]
Я знаю, что не решает сокращенную нотацию (поскольку она не будет работать независимо от того, что вы пытаетесь), но она приближается к этому.
Ответ 9
Я надеюсь, что этот блог поможет в понимании https://medium.com/@payelroyburman14/if-you-are-new-to-es6-the-following-article-might-be-helpful-4b7d093e0079
Ответ 10
если вы используете es6, я бы предложил
let array = [ "bike", "car", name === "van"? "van": null, "bus", "truck", ].filter(Boolean);
Этот массив будет содержать значение "van" только в том случае, если name равно "van", в противном случае он будет отброшен.
Ответ 11
если вы используете Array.push
Вы можете следовать
var a = ["1"]
a.push(... !true ? ["2"] : [])
Результат ["1"]
или же
var a = ["1"]
a.push(... true ? ["2"] : [])
Результат - ["1","2"]