Можно ли упростить следующий JavaScript код:

305
06 августа 2017, 09:21

Я в цикле добавляю элементы в массив.

Вот упрощенный код:

  for (var i = 1; i <= 3; i++) {
    if(!arr['foo']) {
      arr['foo'] = [];
    }
    arr['foo'].push('bar');
  }

Можно ли как то избежать проверки, перед присваиванием элементов в массив?

В php это делается так:

$arr['foo'][] = 'bar';
Answer 1

Можно заранее инициализировать нужные объекты:

arr = {} 
arr['foo'] = [] 
 
for (var i = 1; i <= 3; i++) { 
    arr['foo'].push('bar'); 
} 
 
console.log(arr)

Или:

items = [] 
 
for (var i = 1; i <= 3; i++) { 
    items.push('bar'); 
} 
 
arr = {} 
arr['foo'] = items 
 
// Или: 
// arr = { 
//     foo: items 
// } 
 
console.log(arr)

Answer 2

Без проверки нельзя, потому что метод push() он же собственно у массива вызывается.

Более короче можно сделать так

var arr = {}; 
 
(arr.foo = arr.foo || []).push('bar'); 
(arr.foo = arr.foo || []).push('bar'); 
(arr.foo = arr.foo || []).push('bar'); 
 
(arr[1] = arr[1] || []).push('bar'); 
(arr[1] = arr[1] || []).push('bar'); 
(arr[1] = arr[1] || []).push('bar'); 
 
console.log(arr);

Или так

var arr = {}; 
 
(arr.foo || (arr.foo = [])).push('bar'); 
(arr.foo || (arr.foo = [])).push('bar'); 
(arr.foo || (arr.foo = [])).push('bar'); 
 
(arr[1] || (arr[1] = [])).push('bar'); 
(arr[1] || (arr[1] = [])).push('bar'); 
(arr[1] || (arr[1] = [])).push('bar'); 
 
console.log(arr);

READ ALSO
Не могу запустить проект meteor

Не могу запустить проект meteor

В общем после того как ввожу npm run start в терминал появляется вот такая ошибка

334
Структура js приложения

Структура js приложения

Придумал структуру, думаю, что она не верная и запутанная

359
AngularJS $on не ловит событие

AngularJS $on не ловит событие

Здравствуйте, пытался понять один вопрос который у меня возник с $broadcast в AngulaJS, но так ничего не понялМое приложение работает, но хочется докопаться...

299