簡體   English   中英

如何獲取組選項卡對象內每個字段的計數

[英]How to get the count of each field inside a group tab object

這是我的對象,我想獲取每個選項卡中的字段數。 我正在考慮如果字段的類型是Tab,則跳過該字段,然后在下一個Type of tab之前開始計算字段。

無論如何,這是我下面的對象:

 array(49) {
      [0]=>
      array(12) {
        ["key"]=>
        string(19) "field_596796ae0c4c4"
        ["label"]=>
        string(7) "GENERAL"
        ["name"]=>
        string(0) ""
        ["_name"]=>
        string(0) ""
        ["type"]=>
        string(3) "tab"
        ["order_no"]=>
        int(0)
        ["instructions"]=>
        string(0) ""
        ["required"]=>
        int(0)
        ["id"]=>
        string(10) "acf-field-"
        ["class"]=>
        string(3) "tab"
        ["conditional_logic"]=>
        array(3) {
          ["status"]=>
          int(0)
          ["rules"]=>
          array(1) {
            [0]=>
            array(3) {
              ["field"]=>
              string(19) "field_5964e9dd6df85"
              ["operator"]=>
              string(2) "=="
              ["value"]=>
              string(0) ""
            }
          }
          ["allorany"]=>
          string(3) "all"
        }
        ["field_group"]=>
        int(165)
      }
      [1]=>
      array(18) {
        ["key"]=>
        string(19) "field_5964e9206df82"
        ["label"]=>
        string(5) "Brand"
        ["name"]=>
        string(5) "brand"
        ["_name"]=>
        string(5) "brand"
        ["type"]=>
        string(8) "taxonomy"
        ["order_no"]=>
        int(1)
        ["instructions"]=>
        string(0) ""
        ["required"]=>
        int(1)
        ["id"]=>
        string(15) "acf-field-brand"
        ["class"]=>
        string(8) "taxonomy"
        ["conditional_logic"]=>
        array(3) {
          ["status"]=>
          int(0)
          ["rules"]=>
          array(1) {
            [0]=>
            array(3) {
              ["field"]=>
              string(19) "field_5964e9dd6df85"
              ["operator"]=>
              string(2) "=="
              ["value"]=>
              string(7) "regular"
            }
          }
          ["allorany"]=>
          string(3) "all"
        }
        ["taxonomy"]=>
        string(8) "pa_brand"
        ["field_type"]=>
        string(6) "select"
        ["allow_null"]=>
        int(0)
        ["load_save_terms"]=>
        int(0)
        ["return_format"]=>
        string(2) "id"
        ["field_group"]=>
        int(165)
        ["multiple"]=>
        int(0)
      }
      [2]=>
      array(12) {
        ["key"]=>
        string(19) "field_596796da0c4c5"
        ["label"]=>
        string(6) "LAUNCH"
        ["name"]=>
        string(0) ""
        ["_name"]=>
        string(0) ""
        ["type"]=>
        string(3) "tab"
        ["order_no"]=>
        int(2)
        ["instructions"]=>
        string(0) ""
        ["required"]=>
        int(0)
        ["id"]=>
        string(10) "acf-field-"
        ["class"]=>
        string(3) "tab"
        ["conditional_logic"]=>
        array(3) {
          ["status"]=>
          int(0)
          ["rules"]=>
          array(1) {
            [0]=>
            array(3) {
              ["field"]=>
              string(19) "field_5964e9dd6df85"
              ["operator"]=>
              string(2) "=="
              ["value"]=>
              string(0) ""
            }
          }
          ["allorany"]=>
          string(3) "all"
        }
        ["field_group"]=>
        int(165)
      }
      [3]=>
      array(15) {
        ["key"]=>
        string(19) "field_5964e99e6df84"
        ["label"]=>
        string(20) "Announced (Globally)"
        ["name"]=>
        string(18) "announced_globally"
        ["_name"]=>
        string(18) "announced_globally"
        ["type"]=>
        string(11) "date_picker"
        ["order_no"]=>
        int(3)
        ["instructions"]=>
        string(23) "Date globally announced"
        ["required"]=>
        int(0)
        ["id"]=>
        string(28) "acf-field-announced_globally"
        ["class"]=>
        string(11) "date_picker"
        ["conditional_logic"]=>
        array(3) {
          ["status"]=>
          int(0)
          ["rules"]=>
          array(1) {
            [0]=>
            array(3) {
              ["field"]=>
              string(19) "field_5964e9dd6df85"
              ["operator"]=>
              string(2) "=="
              ["value"]=>
              string(7) "regular"
            }
          }
          ["allorany"]=>
          string(3) "all"
        }
        ["date_format"]=>
        string(4) "mmyy"
        ["display_format"]=>
        string(5) "MM yy"
        ["first_day"]=>
        int(1)
        ["field_group"]=>
        int(165)
      }

或我簡化並在Javascript中運行的對象:

var productObject = [
    {
      "type":"tab",
      "value":"GENERAL"
    },
    {
      "type":"taxonomy",
      "value":"56",
      "label":"Brand"
    },
    {
      "type":"tab",
      "value":"LAUNCH"
    },
    {
      "type":"text",
      "name":"announced_ph",
      "label":"Announced(Philippines)",
      "value":"07072017"
    },{
      "type":"text",
      "name":"announced_global",
      "label":"Announced(Global)",
      "value":"09092017"
    },{
      "type":"tab",
      "value":"NETWORK"
    },{
      "type":"text",
      "name":"sim_type",
      "label":"SIM",
      "value":"dualnano"
    },{
      "type":"text",
      "name":"broadband_speed",
      "label":"Broadband Speed",
      "value":"LTE Cat6"
    },{
      "type":"text",
      "name":"broadband_speed",
      "label":"Broadband Speed",
      "value":"LTE Cat6"
    }
  ];

我需要知道類型為“選項卡”的對象之后的字段/對象的數量。 因為我需要了解表的rowpan值。

我正在考慮的輸出應該是:

Tab "General" has 1 field
Tab "Launch" has 2 field
Tab "Network" has 3 field

謝謝!

循環遍歷對象,然后檢查type是否等於tab 類似於if (productObject.type == 'tab')

如果等於制表符,則將計數器變量設置為0,然后將其遞增直到達到下一個tab值。

my_counter = 0
tab_type = ''
for po in productObject:
    if po['type'] == 'tab':
        my_counter = 0
        tab_type = po['value']
    my_counter += 1

這樣的事情。

使用productObject ,我會根據它的關鍵value

//Getting all "value" keys 
var arr = $.map(productObject,function(k,v){
  if(k.type == "tab"){
    return k.value;
  }
});

//Counting each duplicates
var map = arr.reduce(function(prev, cur) {
  prev[cur] = (prev[cur] || 0) + 1;
  return prev;
}, {});

//Returns JSON
console.log(JSON.stringify(map));

樣本輸出:

{"GENERAL":1,"LAUNCH":1,"NETWORK":1}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM