@mvr1976
Учу html, css, js

Как работает доступ к свойству объекта через квадратные скобки?

Добрый день!
Помогите пожалуйста разобраться в синтаксисе:
var arr1 = ["andesite", "dirt", "pink wool", "dirt", "dead shrub"];
var counts = {}; //из значений массива делаем ключи объекта, 
//а из количества их повторений в массиве делаем их свойства

	for( var i=0, l=arr1.length; i<l; i++) {
	    counts[arr1[i]] = (counts[arr1[i]] || 0) + 1; // что это? я понимаю, что это
//операция присвоения свойства ключу,
	   } // но как оно работает - не пойму. 
console.log(counts);

Заранее благодарен за ликбез)
  • Вопрос задан
  • 584 просмотра
Пригласить эксперта
Ответы на вопрос 3
keslo
@keslo
counts[arr1[i]] = (counts[arr1[i]] || 0) + 1;
// если свойство count[arr1[i]] уже есть в объекте arr1
// то мы получаем значение свойства (число) и увеличиваем на 1

// если свойства count[arr1[i]] нет в объекте,
// то оно создается и записывается значение этого свойства 1

// При первой итерации при i=0 у вас создается свойство в объекте arr1['andesite']
// и ему присваивается 1
arr1['andesite'] = ( arr1['andesite'] || 0 ) + 1; // => arr1['andesite'] = 0 + 1; 

// и так с каждым новым свойством
// далее это свойство при необходимости просто увеличивает свое значение
Ответ написан
nepritimov_m
@nepritimov_m
Frontend dev.
counts[arr1[i]] = (counts[arr1[i]] || 0) + 1;
counts[arr1[i]] ты приравниваешь, при наличии arr1[i] -> counts[arr1[i]] + 1, при отсутствии 0 + 1
Ответ написан
VIKINGVyksa
@VIKINGVyksa
front-end developer
Если мы будем объявлять через [] то мы можем создавать типо оссациотивных массивов в js.

var arr = ["Andrey","Petia","Gamer"];
var obj={};

for(var i =0,l=arr.length;i<l;i++){
    //мы вольны создавать произвольные свойства в объекте
   // через дот нотацию мы такое не можем позволить, для неё нам нужно реально указать имя свойства obj.Andrey ="name";
    obj[arr[i]] = "name";   
}


если бонально то вот разница

var obj = {};
//нам надо сделать свойство название которого являеться значение какой-нeто переменной
var name="Andrey";

//для этого сделаем так
obj[name]="это имя";

//для того чтобы сделать это через точку мы должны явно указать имя а не из переменной его взять

var obj={};

obj.Andrey="это имя";


Где это может пригодиться? Это может пригодиться когда вы отправляите форму на сервер AJAX-ом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы