簡體   English   中英

獲得正確價值的更好方法

[英]Better way to get the right value

我在嘗試從json獲取值時遇到了一些麻煩。 首先,我有一個json數組,每個都有一個名字(atributo),一個相似性(忘了這個),最后是一個名為valores的數組,帶有鍵和值(chave = key / valor = value)。

所以我有很多案例,每個案例都有一個來自這個數組的值,如下例所示。 我想要的是使用我案例中的密鑰從Valores獲取值。

對,知道我正在使用兩個,一個找到正確的atributo,另一個找到正確的密鑰。 有沒有更容易做到這一點? 如果需要,我可以重新構建這個json模式。

我的陣列:

[
  {
    "atributo": "date",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Abril", "valor": "0"},
      {"chave": "Maio", "valor": "1"},
      {"chave": "Junho", "valor": "2"},
      {"chave": "Julho", "valor": "3"},
      {"chave": "Agosto", "valor": "4"},
      {"chave": "Setembro", "valor": "5"},
      {"chave": "Outubro", "valor": "6"}
    ]
  },
  {
    "atributo": "plantStand",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Normal", "valor": "0"},
      {"chave": "lt-normal", "valor": "1"}
    ]
  },
  {
    "atributo": "precip",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "lt-normal", "valor": "0"},
      {"chave": "Normal", "valor": "1"},
      {"chave": "gt-normal", "valor": "2"}
    ]
  },
  {
    "atributo": "temp",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "lt-norm", "valor": "0"},
      {"chave": "norm", "valor": "1"},
      {"chave": "gt-norm", "valor": "2"}
    ]
  },
  {
    "atributo": "hail",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Yes", "valor": "0"},
      {"chave": "No", "valor": "1"}
    ]
  },
  {
    "atributo": "cropHist",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "diff-1st-yr", "valor": "0"},
      {"chave": "same-1st-yr", "valor": "1"},
      {"chave": "same-lst-two-yrs", "valor": "2"},
      {"chave": "same-lst-sev-yrs", "valor": "3"}
    ]
  },
  {
    "atributo": "areaDamaged",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "scattered", "valor": "0"},
      {"chave": "low-areas", "valor": "1"},
      {"chave": "upper-areas", "valor": "2"},
      {"chave": "whole-field", "valor": "3"}
    ]
  },
  {
    "atributo": "severity",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Minor", "valor": "0"},
      {"chave": "pot-severe", "valor": "1"},
      {"chave": "severe", "valor": "2"}
    ]
  },
  {
    "atributo": "seedTmt",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "none", "valor": "0"},
      {"chave": "fungicida", "valor": "1"},
      {"chave": "Outros", "valor": "2"}
    ]
  },
  {
    "atributo": "germination",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "90-100%", "valor": "0"},
      {"chave": "80-89%", "valor": "1"},
      {"chave": "lt-80%", "valor": "2"}
    ]
  },
  {
    "atributo": "plantGrowth",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "Abnorm", "valor": "1"}
    ]
  },
  {
    "atributo": "leaves",
    "similaridade": "Não",
    "valores": [
      {"chave": "Norm", "valor": "0"},
      {"chave": "Abnorm", "valor": "1"}
    ]
  },
  {
    "atributo": "leafspotsHalo",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "absent", "valor": "0"},
      {"chave": "yellow-halos", "valor": "1"},
      {"chave": "no-yellow-halos", "valor": "2"}
    ]
  },
  {
    "atributo": "leafspotsMarg",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "w-s-marg", "valor": "0"},
      {"chave": "no-w-s-marg", "valor": "1"},
      {"chave": "dna", "valor": "2"}
    ]
  },
  {
    "atributo": "leafspotSize",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "lt-1/8", "valor": "0"},
      {"chave": "gt-1/8", "valor": "1"},
      {"chave": "dna", "valor": "2"}
    ]
  },
  {
    "atributo": "leafShread",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "leafMalf",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "leafMild",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Upper-surf", "valor": "1"},
      {"chave": "Lower-surf", "valor": "2"}
    ]
  },
  {
    "atributo": "stem",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "Abnorm", "valor": "1"}
    ]
  },
  {
    "atributo": "lodging",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Yes", "valor": "0"},
      {"chave": "No", "valor": "1"}
    ]
  },
  {
    "atributo": "stemCankers",
    "similaridade": "Sim",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "below-soil", "valor": "1"},
      {"chave": "Above-soil", "valor": "2"},
      {"chave": "Above-sec-nde", "valor": "3"}
    ]
  },
  {
    "atributo": "cankerLesion",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "dna", "valor": "0"},
      {"chave": "Brown", "valor": "1"},
      {"chave": "dk-brown-blk", "valor": "2"},
      {"chave": "tan", "valor": "3"}
    ]
  },
  {
    "atributo": "fruitingBodies",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "externalDecay",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "firm-and-dry", "valor": "1"},
      {"chave": "watery", "valor": "2"}
    ]
  },
  {
    "atributo": "mycelium",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "intDiscolor",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "None", "valor": "0"},
      {"chave": "Brown", "valor": "1"},
      {"chave": "Black", "valor": "2"}
    ]
  },
  {
    "atributo": "sclerotia",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "fruitPods",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "Diseased", "valor": "1"},
      {"chave": "few-present", "valor": "2"},
      {"chave": "dna", "valor": "3"}
    ]
  },
  {
    "atributo": "fruitSpots",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Colored", "valor": "1"},
      {"chave": "Brown-w/blk-specks", "valor": "2"},
      {"chave": "Distort", "valor": "3"},
      {"chave": "dna", "valor": "4"}
    ]
  },
  {
    "atributo": "seed",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "Abnorm", "valor": "1"}
    ]
  },
  {
    "atributo": "moldGrowth",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "seedDiscolor",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "seedSize",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "lt-norm", "valor": "1"}
    ]
  },
  {
    "atributo": "shriveling",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Absent", "valor": "0"},
      {"chave": "Present", "valor": "1"}
    ]
  },
  {
    "atributo": "roots",
    "similaridade": "Não",
    "valores": [
      {"chave": "Desconhecido", "valor": "?"},
      {"chave": "Norm", "valor": "0"},
      {"chave": "Rotted", "valor": "1"},
      {"chave": "galls-cysts", "valor": "2"}
    ]
  }
]

示例案例:

{
    "caso": 1,
    "doenca": "diaporthe-stem-canker",
    "areaDamaged": "low-areas",
    "cankerLesion": "Brown",
    "cropHist": "same-1st-yr",
    "date": "Outubro",
    "externalDecay": "firm-and-dry",
    "fruitSpots": "dna",
    "fruitingBodies": "Present",
    "fruitPods": "Norm",
    "germination": "90-100%",
    "hail": "Yes",
    "intDiscolor": "None",
    "leafMalf": "Absent",
    "leafMild": "Absent",
    "leafShread": "absent",
    "leafspotsHalo": "absent",
    "leafspotSize": "dna",
    "leafspotsMarg": "dna",
    "leaves": "Abnorm",
    "lodging": "No",
    "moldGrowth": "Absent",
    "mycelium": "Absent",
    "plantGrowth": "Abnorm",
    "plantStand": "Normal",
    "precip": "gt-normal",
    "roots": "Norm",
    "sclerotia": "Absent",
    "seed": "Norm",
    "seedDiscolor": "Absent",
    "seedSize": "Norm",
    "seedTmt": "none",
    "severity": "pot-severe",
    "shriveling": "Absent",
    "stem": "Abnorm",
    "stemCankers": "Above-sec-nde",
    "temp": "norm"
  }

所以我在哪里有areaDamaged:低區域,我想從areaDamaged獲取低區域的值。 誰知道更好的方法?

我認為“更好”意味着“更有效率”。

如果是這樣,那么只要你到處都有數組,就沒有“更好”的方式。

但是,您的數組看起來像是持有一些參考數據,您將一遍又一遍地訪問這些參考數據。 在這種情況下我有時會做的是將數組轉換為地圖,它們的工作速度更快,如下所示:

var refDataMap = {};

var refDataItem, refDataValue;

for (var i = 0; i < refData.length; i++) {
    refDataItem = refData[i];
    refDataMap[refDataItem.atributo] = refDataItem;
    refDataItem.valoresMap = {};
    for (var j = 0; j < refDataItem.valores.length; j++) {
        refDataValue = refDataItem.valores[j];
        refDataItem.valoresMap[refDataValue.chave] = refDataValue.valor;
    }
}

var result = refDataMap["seed"].valoresMap["Abnorm"]; // Gives value 1

我已經創建了一些性能測試,並且可以看到訪問這樣的映射比迭代這些數組( http://jsben.ch/#/ADhFC )快約25%。

但是,如果將映射初始化序列包含在測試中,那么如果測量單個訪問( http://jsben.ch/#/GQBC0 ),則數組的速度是其兩倍。

我觀察到你需要訪問這個~50次以獲得地圖初始化的開銷才能開始付清( http://jsben.ch/#/b6vbs )。

您可以在json結構中使用key / value direct,而不是在json中使用“valor”和“chave”屬性。

像這樣:

var propriedades = {    
    "areaDamaged" : {
        "similaridade": "Sim",
        "valores": {
             "Desconhecido" : "?",
             "scattered" : "0",
             "low-areas" : "1",
             "upper-areas" : "2",
             "whole-field" : "3"
         }
    },
 ...

然后,您可以更輕松地獲得價值:

var valor = propriedades["areaDamaged"].valores["low-areas"];

暫無
暫無

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

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