Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доступ к элементу массива. (https://javascript.ru/forum/misc/45240-dostup-k-ehlementu-massiva.html)

jtjt1010 20.02.2014 11:48

Доступ к элементу массива.
 
Привет

Есть массив
prices =[ 
        {name: 'Bed', price: 900},
        {name: 'Table', price: 400}    
    ]


Как мне достучаться до переменной, например получить price Стола (Table)?

Я конечно могу обратиться prices[1].price Но это не читаемо. В идеале хотелось бы обратиться prices.table.price

Что-то вроде ассоциативного массива. Наверное как-то по другому надо. Поделитесь лучшей практикой.

ruslan_mart 20.02.2014 11:59

var prices = [ 
        {name: 'Bed', price: 900},
        {name: 'Table', price: 400}    
], _prices = {};

prices.forEach(function(el) {
   _prices[el.name] = el;
});

prices = _prices;

alert( prices.Table.price );


var prices = {
   bed: 900,
   table: 200
};

alert(prices.table);

рони 20.02.2014 12:02

jtjt1010,
:-?
var prices = [{
    name: 'Bed',
    price: 900
}, {
    name: 'Table',
    price: 400
}]
for (var i = 0; i < prices.length; i++) {
    if (prices[i].name == 'Table') alert(prices[i].price)
}
for (var i = 0; i < prices.length; i++) {
    prices[prices[i].name] = {};
    prices[prices[i].name]['price'] = prices[i].price
}
alert(prices.Table.price)

jtjt1010 20.02.2014 12:07

Все понял. Надо писать функцию :)) Думал есть что-то встроенное в JS. Спасибо!

jtjt1010 20.02.2014 12:13

Цитата:

Сообщение от Ruslan_xDD

var prices = {

   bed: 900,

   table: 200

};

alert(prices.table);

Это первое что пришло на ум. Но хотелось бы еще иметь доступ к name.
Так как данные будут подгружаться из базы данных. Я не могу точно знать что у меня будет, кровать или стулья ))

danik.js 20.02.2014 12:17

Цитата:

Сообщение от jtjt1010
Я не могу точно знать что у меня будет, кровать или стулья ))

И как это мешает использовать более удобный и шустрый, предложенный тут вариант?

ruslan_mart 20.02.2014 12:22

Array.prototype.getObjectByName = function(name) {
	var i, len = this.length, self;
	for(i = 0; i < len; i++) {
		self = this[i];
		if(typeof self == 'object' && self.name == name) return self;
	}
};
      
var prices = [{name: 'table', price: 200}];
      
alert( prices.getObjectByName('table').price );


:p

jtjt1010 20.02.2014 12:30

Цитата:

Сообщение от Ruslan_xDD
:p

Круто! Но пока для меня сложно.

danik.js 20.02.2014 12:49

Цитата:

Сообщение от jtjt1010
Круто!

Ага. И еще порицательно! Профессионалы так никогда не делают.

ruslan_mart 20.02.2014 12:59

danik.js, понятное дело, что искать объект по свойству как-то тупо и не логично. :)


Часовой пояс GMT +3, время: 11:36.