Как записать это “arr = []; ⏎ arr.push(smtn);” в одну строку?

315
29 января 2017, 15:26

Есть такой небольшой кусочек кода:

if (Rect.__instances__) {
  Rect.__instances__.push(this);
} else {
  Rect.__instances__ = [];
  Rect.__instances__ = [].push(this);
}

Суть: если у класса есть свойство __instances__, то пихаем в него this. Если нет, то сначала инициализируем __instances__ пустым массивом, а после этого пихаем в него this.

Нужно записать это условие в одну строку вида:

Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = [].push(this);

Но этот код вместо того, чтобы вернуть массив со значением this внутри, просто возвращает единицу.

Тогда я попробовал сделать так:

Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = (() => {return []}).push(this);

На что мне выдало ошибку вида:

Uncaught TypeError: (intermediate value).push is not a function

Пробовал еще и так:

Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = (() => {new Array()}).push(this);

Ошибка та же.

Теперь прошу помощи здесь. Кстати, если кто-то понял, что делает этот код и для того, что я пишу есть решение получше, вроде методов стандартной библиотеки, то такой подход тоже сгодится :)

P.S. Я добавил к вопросу тег lambda, потому что здесь, вроде как именно про это речь и идет. Дело в том, что лямбды в JavaScript'е я гуглил, и в ответ мне выдавало только инфу, связанную со стрелочными ф-ми. Поэтому рискнул предположить, что, поскольку дело тут, скорее всего, именно в стрелочной функции, то и тег "лямбда" сюда подходит.

Answer 1

Выбирай. Вроде последний вариант хороший.

if (Rect.__instances__) {
  Rect.__instances__.push(this);
} else {
  Rect.__instances__ = [this];
}
Rect.__instances__ ? Rect.__instances__.push(this) : (Rect.__instances__ = [this]);
if (!Rect.__instances__) {
  Rect.__instances__ = [];
}
Rect.__instances__.push(this);
(Rect.__instances__ = Rect.__instances__ || []).push(this);
Answer 2
(Rect.__instances__ = []).push(this);

или

Rect.__instances__ = [this];

а push возвращает новую длину массива, поэтому Вы и наблюдали единицу в первоначальном варианте кода.

Answer 3

var Rect={}; 
 
if (Rect.__instances__) { 
  Rect.__instances__.push("1111"); 
} else { 
  Rect.__instances__ = new Array("1111"); 
} 
console.log(Rect)

READ ALSO
Python: заполнить форму ввода на fedresurs.ru

Python: заполнить форму ввода на fedresurs.ru

необходимо заполнить форму здесь https://fedresursru/messages/IsSearching, т

343
data-access-token for fecebook (Блок поделиться от Яндекс)

data-access-token for fecebook (Блок поделиться от Яндекс)

Ребята, подскажите пожалуйста, какой именно токен нужно использовать для кнопки шаринга facebook

352
Ajax + сортировка

Ajax + сортировка

Всем приветВ работе использую jQuery(rapydscript) + webpy на серверной части

388
nw.js. Запустить процесс. Command not found

nw.js. Запустить процесс. Command not found

В итоге команда "node" не найдена:( Делаю все это в nw

345