Получить значение вложенного объекта с изменяющимся именем с помощью Javascript - PullRequest
0 голосов
/ 14 февраля 2019

У меня возникают проблемы при попытке получить значение из списка объектов в веб-крюке Woocommerce.Woocommerce вводит порядковый номер выбранного выпадающего списка (т. Е. Королевская почта - 5-я в раскрывающемся списке, USPS - 3-я), поэтому мне нужно иметь возможность получить к ней доступ, когда она имеет любое значение.

var labelchoice = event.line_items[0].meta_data[1].value[0].label; // SUCCESS This returns "Custom"
var labelchoice1 = event.line_items[0].meta_data[1].value[0].value[0].value.5.value; // FAILED with "Unexpected Number"
var labelchoice2 = event.line_items[0].meta_data[1].value[0].value.value.5.value; // FAILED with "Unexpected Number"
var labelchoice3 = event.line_items[0].meta_data[1].value[0].value[0].value[0].5.value; // FAILED with "Unexpected Number"
var labelchoice4 = event.line_items[0].meta_data[1].value[0].value[0].value[0].5[0].value; // FAILED with "Unexpected Number"

Номер«5» - это номер раскрывающегося списка (есть 8 вариантов, например, USPS, Airmail и т. Д.) На странице продукта.Проблема здесь заключается в том, что я не знаю, какое число будет выбрано (выпадающий список, который выбирает клиент), так что объект «5», возможно, следует ссылаться как подстановочный знак, поскольку это может быть любое число от 1 до 8.

Может кто-нибудь помочь мне получить это вложенное значение "label"?- показан в примере как «Королевская почта»

"meta_data": [
    {
    "id": 166,
    "key": "Dropdown options",
    "value": "Custom"
    },
    {
    "id": 167,
    "key": "_WCPA_order_meta_data",
    "value": [
        {
        "type": "select",
        "name": "select-1549626172813",
        "label": "Custom",
        "value": {
            "5": {
            "i": 5,
            "value": "UK-RM",
            "label": "Royal Mail"
            }
        },

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019

Если имя свойства (5) неизвестно, его можно запросить:

var labelchoiceX = event.line_items[0].meta_data[1].value[0].value[
  Object.keys(event.line_items[0].meta_data[1].value[0].value)[0]
].label;
0 голосов
/ 14 февраля 2019

Попробуй это.Я думаю, что это правильный порядок:

var labelchoice = event.line_items [0] .meta_data [1] .value [0] .value.5.label;

0 голосов
/ 14 февраля 2019

Вы используете синтаксис доступа к свойству [].

const m = new Map();
for (let i = 1; i <= 8; i++) {
  m.set(i,  
    event.line_items[0].meta_data[1].value[0].value[String(i)].value /* or .label? */);
}
0 голосов
/ 14 февраля 2019

Вы можете передать индекс в виде строковой переменной

const index = '5' // or any other value from the select dropdown
const labelchoice = event.line_items[0].meta_data[1].value[0].value[index].label

Вот в действии: https://codepen.io/herodrigues/pen/RvYqeL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...