Задать вопрос
@boga-net

Как обратиться к ключу массива с помощью другой переменной?

Есть ассоциативный многомерный массив

var
  sedan = {
        'eject' : {
          '13' : 50,
          '14' : 50,
          '15' : 50
        },
        'installation' : {
          '13' : 25,
          '14' : 40,
          '15' : 50
        },
        'balancing' : {
          '13' : 50,
          '14' : 60,
          '15' : 80
        }
  },
  crossover = {
        'eject' : {
          '13' : 50,
          '14' : 60,
          '15' : 60
        },
        'installation' : {
          '13' : 50,
          '14' : 60,
          '15' : 60
        },
        'balancing' : {
          '13' : 444,
          '14' : 555,
          '15' : 666
        }
  },
  truckPrice = 370;


и функция, чтобы получить текущее значение выбранной машины. В bodyRes попадает : 'sedan' , 'crossover' или truck', что равнозначно именам ключей ассоциативного массива.

var bodyRes = bodyCheck();

      function bodyCheck() {
        if (body == 'Седан') {
          x = 'sedan';
        }
        else if (body == 'Кроссовер') {
          x = 'crossover';
        }
        else if (body == 'Грузовик') {
          x = 'truck';
        }
        return x;
      }


Далее я хочу сравнить выбранный тип кузова машины ( 'sedan' , 'crossover' или truck') и обратиться к соответствующему ключу массива, затем к услуге ('eject', 'installation' или 'balancing') и добавить туда выбранный диаметр колеса

sedan['balancing'][diameter]
bodyRes [ 'услуга' ] [ 'диаметр колеса' ] = число - значение ключа массива

var balancingSum = balancingCheckSum();

      function balancingCheckSum() {
        var x = bodyRes;
        console.log( bodyRes );
        console.log( x['balancing'][diameter] );
        return x;
      };

      console.log(balancingSum); - x is undefined


Выбранный диаметр передаётся нормально и я могу обратиться к ключу массива и достать значение, подставляя [diameter], и возвращается, например, 50 или 80
Но как подставить туда результат работы функции bodyCheck() в переменной bodyRes? Чтобы переменная balancingSum возвращала только число-сумму, с уже выбранными значениями массива, в зависимости от того, что выбрал пользователь?

sedan['balancing'][diameter]
crossover['balancing'][diameter]
  • Вопрос задан
  • 575 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Есть ассоциативный многомерный массив

Нет, у вас есть несколько объектов в разных переменных, а не один массив.

Соответственно, решение - собрать данные в подходящую структуру. В данном случае это будет объект:
var data = {
  sedan: {
        'eject' : {
          '13' : 50,
          '14' : 50,
          '15' : 50
        },
        'installation' : {
          '13' : 25,
          '14' : 40,
          '15' : 50
        },
        'balancing' : {
          '13' : 50,
          '14' : 60,
          '15' : 80
        }
  },
  crossover: {
        'eject' : {
          '13' : 50,
          '14' : 60,
          '15' : 60
        },
        'installation' : {
          '13' : 50,
          '14' : 60,
          '15' : 60
        },
        'balancing' : {
          '13' : 444,
          '14' : 555,
          '15' : 666
        }
  },
};


Ну и дальше всё просто:
data[x].balancing
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
var cars = {
    sedan:  { ... },
    crossover: { ... },
    truck: { ... }
};

car = cars['sedan'];
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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