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

1

Можно ли получить доступ к членам многомерного массива, указав имя члена как переменной? Таким образом, можно изменить столбец, изменив значение переменной и в конечном итоге получить значение этого столбца.

Пример набора данных

{
    "data": {
        "id": 2757, 
        "name": "Callisto Network", 
        "symbol": "CLO", 
        "website_slug": "callisto-network", 
        "rank": 472, 
        "circulating_supply": 431731687.0, 
        "total_supply": 479443453.0, 
        "max_supply": 6500000000.0, 
        "quotes": {
            "USD": {
                "price": 0.0183603, 
                "volume_24h": 37051.4, 
                "market_cap": 7926723.0, 
                "percent_change_1h": 0.15, 
                "percent_change_24h": -2.43, 
                "percent_change_7d": -9.42
            }, 
            "BTC": {
                "price": 2.7767e-06, 
                "volume_24h": 5.6034650942, 
                "market_cap": 1199.0, 
                "percent_change_1h": 0.01, 
                "percent_change_24h": -6.16, 
                "percent_change_7d": -7.0
            }
        }, 
        "last_updated": 1531748143
    }, 
    "metadata": {
        "timestamp": 1531747771, 
        "error": null
    }
}
  • 0
    Можете ли вы предоставить пример набора данных?
  • 0
    api.coinmarketcap.com/v2/ticker/2757/?convert=BTC значением будет USD или BTC, поэтому, если вам понадобится что-то вроде data.quotes.USD.price и другого времени data.quotes.BTC.price Вопрос в том, как получить эти "USD" или "BTC" внутри запроса
Теги:
arrays
multidimensional-array

4 ответа

1
Лучший ответ

Вы можете устанавливать ключи в массиве и прокручивать его, чтобы получать значения динамически, что-то вроде ниже

var array = {
  "data": {
        "id": 2757, 
        "name": "Callisto Network", 
        "symbol": "CLO", 
        "website_slug": "callisto-network", 
        "rank": 473, 
        "circulating_supply": 431584927.0, 
        "total_supply": 479260453.0, 
        "max_supply": 6500000000.0, 
        "quotes": {
            "USD": {
                "price": 0.0185867, 
                "volume_24h": 37855.1, 
                "market_cap": 8021740.0, 
                "percent_change_1h": 8.15, 
                "percent_change_24h": -2.81, 
                "percent_change_7d": -8.51
            }, 
            "BTC": {
                "price": 2.8148e-06, 
                "volume_24h": 5.7328503345, 
                "market_cap": 1215.0, 
                "percent_change_1h": 7.98, 
                "percent_change_24h": -6.41, 
                "percent_change_7d": -5.96
            }
        }, 
        "last_updated": 1531744663
    }, 
    "metadata": {
        "timestamp": 1531744326, 
        "error": null
    }
};

/* Specifying keys in array */
var key = ["USD", "BTC"];

for (key in array.data.quotes) {    
    /* Price of both keys */
    console.log(key + ' price is: ' + array.data.quotes[key].price);
    /*****************************************/
}

Или вы можете просто передать имя переменной, как это

var key = "USD";
console.log(array.data.quotes[key].price);
0

Да, это возможно. На объекте, который вы предоставили:

let myObject = {
    "data": {
        "id": 2757, 
        "name": "Callisto Network", 
        "symbol": "CLO", 
        "website_slug": "callisto-network", 
        "rank": 478, 
        "circulating_supply": 431633647.0, 
        "total_supply": 479321653.0, 
        "max_supply": 6500000000.0, 
        "quotes": {
            "USD": {
                "price": 0.0180211, 
                "volume_24h": 36733.5, 
                "market_cap": 7778513.0, 
                "percent_change_1h": 3.86, 
                "percent_change_24h": -5.71, 
                "percent_change_7d": -11.29
            }, 
            "BTC": {
                "price": 2.7279e-06, 
                "volume_24h": 5.5604246894, 
                "market_cap": 1177.0, 
                "percent_change_1h": 3.77, 
                "percent_change_24h": -9.24, 
                "percent_change_7d": -8.86
            }
        }, 
        "last_updated": 1531744784
    }, 
    "metadata": {
        "timestamp": 1531744413, 
        "error": null
    }
}

Чтобы получить доступ к полю name из переменной этого объекта, выполните следующие действия:

let x = 'name'

console.log(myObject.data[name]);

Обратите внимание, вместо использования . , мы вместо этого обмениваем name переменной открывающей и закрывающей скобками для доступа к ней.

"Callisto Network" распечатает

Вы можете узнать больше здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors

0

спасибо за помощь, это работает :)

const variable = 'USD' // change it to BTC
alert(JSON.stringify(array.quotes[variable].price), true) 
0

Просто используйте альтернативный синтаксис объекта следующим образом:

data.quotes[$variable].price

Вот пример с вашими данными jsfiddle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню