代码之家  ›  专栏  ›  技术社区  ›  Gracie

使用javascript检索具有更改名称的嵌套对象的值

  •  0
  • Gracie  · 技术社区  · 6 年前

    我在试图从Woomerce Webhook中的对象列表中获取值时遇到问题。woocommerce输入所选下拉列表的订单号(即,royal mail在下拉列表中是第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"
                }
            },
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   P Varga    6 年前

    以防财产名称( 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;
    
        2
  •  0
  •   herodrigues    6 年前

    可以将索引作为字符串变量传递

    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

        3
  •  0
  •   P Varga    6 年前

    你在追求 [] 属性访问语法。

    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? */);
    }
    
        4
  •  -1
  •   Ηρακλής Β.    6 年前

    试试这个。我认为这是正确的顺序:

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