Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.02.2014, 11:48
Аватар для jtjt1010
Интересующийся
Отправить личное сообщение для jtjt1010 Посмотреть профиль Найти все сообщения от jtjt1010
 
Регистрация: 10.02.2014
Сообщений: 14

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

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


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

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

Что-то вроде ассоциативного массива. Наверное как-то по другому надо. Поделитесь лучшей практикой.
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2014, 11:59
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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);

Последний раз редактировалось ruslan_mart, 20.02.2014 в 12:03.
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2014, 12:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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)
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2014, 12:07
Аватар для jtjt1010
Интересующийся
Отправить личное сообщение для jtjt1010 Посмотреть профиль Найти все сообщения от jtjt1010
 
Регистрация: 10.02.2014
Сообщений: 14

Все понял. Надо писать функцию ) Думал есть что-то встроенное в JS. Спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2014, 12:13
Аватар для jtjt1010
Интересующийся
Отправить личное сообщение для jtjt1010 Посмотреть профиль Найти все сообщения от jtjt1010
 
Регистрация: 10.02.2014
Сообщений: 14

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

var prices = {

   bed: 900,

   table: 200

};

alert(prices.table);
Это первое что пришло на ум. Но хотелось бы еще иметь доступ к name.
Так как данные будут подгружаться из базы данных. Я не могу точно знать что у меня будет, кровать или стулья ))
Ответить с цитированием
  #6 (permalink)  
Старый 20.02.2014, 12:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от jtjt1010
Я не могу точно знать что у меня будет, кровать или стулья ))
И как это мешает использовать более удобный и шустрый, предложенный тут вариант?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 20.02.2014, 12:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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 );


Ответить с цитированием
  #8 (permalink)  
Старый 20.02.2014, 12:30
Аватар для jtjt1010
Интересующийся
Отправить личное сообщение для jtjt1010 Посмотреть профиль Найти все сообщения от jtjt1010
 
Регистрация: 10.02.2014
Сообщений: 14

Сообщение от Ruslan_xDD
Круто! Но пока для меня сложно.
Ответить с цитированием
  #9 (permalink)  
Старый 20.02.2014, 12:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от jtjt1010
Круто!
Ага. И еще порицательно! Профессионалы так никогда не делают.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 20.02.2014, 12:59
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к родительскому элементу по дочернему Кирюха =) jQuery 24 13.06.2018 12:22
Доступ к объекту массива Fronnt Общие вопросы Javascript 6 07.10.2013 23:04
Доступ к элементу по имени переменной sanyomix Общие вопросы Javascript 2 28.12.2012 11:31
Выборка((( получить доступ к дочернему элементу denfer12 Общие вопросы Javascript 1 13.08.2012 15:46
Получить доступ к элементу полученному через ajax Neokortex jQuery 10 14.01.2011 16:27