2017-05-21 1 views
1

私のjsonデータにこのようなエントリが多数あります。 「タイプ」は、twの属性、すなわち所得と経費からなる。 JavaScriptを使用する際にtype = "費用"の "label"を印刷するにはどうすればいいですか? 以下のjsonデータは単なる例です。 Check the image to get a better idea of json data.jsonデータのフィルタを追加する方法

"expenses_veterinary":{ 
     label:"Veterinary, breeding, and medicine" 
     name:"expenses_veterinary" 
     total:0 
     type:"expense" 
    } 
console.log($ctrl.gold_standard_categories); prints all the json data. 

私は以下の書かれたコードを試してみましたが、その作業はありません。

if($ctrl.gold_standard_categories.name.type=expense){ 
     console.log($ctrl.gold_standard_categories.label); 
    } 
+0

JSON.parse($ ctrl.gold_standard_categories)[0] .LABEL? – Booster2ooo

答えて

0

ifステートメントに等号が1つあるため、すべてのデータが印刷されます。

それはあなたが常にあなたのtypeプロパティに値「経費」を割り当てるしようとしているので、if文が常にtrueに評価されることを意味します。

compareあなたがしようとしているのは値です。値を割り当てません。

0

https://jsfiddle.net/yxL4rpj2/

varmoneyにあなたがここにJSONレスポンス

var grouppedMoney = { 
    expenses: [], 
    incomes: [] 
}; 

for(var i = 0; i <= money.length - 1; i++){ 

    for(moneyType in money[i]){ 
    var _typeString = money[i][moneyType].type == 'expense' ? 'expenses' : 'incomes'; 

    grouppedMoney[_typeString].push(money[i][moneyType]); 

    } 

} 
0

を保存することを前提とし、あなたのオブジェクトの上での基本的なexample.Iterateあるとtype値が、その後label値を印刷expenseに等しい参照してください。

var data = { 
 
"expenses_veterinary":{ 
 
     "label":"Veterinary, breeding, and medicine", 
 
     "name":"expenses_veterinary", 
 
     "total":0, 
 
     "type":"income" 
 
    }, 
 
    
 
    "expenses_car":{ 
 
     "label":"bus and truck", 
 
     "name":"expenses_car", 
 
     "total":0, 
 
     "type":"expense" 
 
    } 
 
}; 
 
    
 
for (var property in data) { 
 
    if (data.hasOwnProperty(property)) { 
 
     // do stuff 
 
\t if(data[property]['type']=='expense'){ 
 
\t  console.log(data[property]['label']); 
 
\t } 
 
    } 
 
}

0

あなたがAngularJS($ctrl)を使用しているので、あなたがこれを行うには、ネイティブの角度フィルタまたはカスタムフィルタのいずれかを使用することを検討しているようです。

ところで、バニラJSを使用して、この単純なループは動作します:

for(var key in jsonData) { 
    if("expense" === jsonData[key]["type"]) { 
    console.log(jsonData[key]["label"]); 
    } 
} 

サンプルスニペット

var jsonData = { 
 
    "expensesigoods": { 
 
    "name": "expenses_goods", 
 
    "label": "Cost of goods sold", 
 
    "type": "expense", 
 
    "total": 0 
 
    }, 
 
    "expensesicar": { 
 
    "name": "expenses_car", 
 
    "label": "Car and truck expenses", 
 
    "type": "expense", 
 
    "total": 0 
 
    }, 
 
    "expensesichemicals": { 
 
    "name": "expenses_chemicals", 
 
    "label": "Chemicals", 
 
    "type": "expense", 
 
    "total": 0 
 
    }, 
 
    "expensesiconservation": { 
 
    "name": "expenses_conservation", 
 
    "label": "Conservation expenses", 
 
    "type": "other", 
 
    "total": 0 
 
    } 
 
} 
 

 
for(var key in jsonData) { 
 
    if("expense" === jsonData[key]["type"]) { 
 
    console.log(jsonData[key]["label"]); 
 
    } 
 
}

+0

'Vanilla js'をどこで使いましたか? –

+0

私はあなたのコメントを理解していません。バニラJSは純粋なJSです^^ –

+0

元のOPは 'vanilla.js'や' angular.js'にはタグを付けませんでした。 –

0

type="expense"に基づいてデータをフィルタリングするArray.filter()方法を試してみてください。

Working Fiddle

var obj = { 
 
    "expenses_goods":{ 
 
     "label":"expenses_goods", 
 
     "name":"expenses goods", 
 
     "total":0, 
 
     "type":"income" 
 
    }, 
 
    "expenses_cars":{ 
 
     "label":"expenses_cars", 
 
     "name":"expenses cars", 
 
     "total":0, 
 
     "type":"expense" 
 
    }, 
 
    "expenses_veterinary":{ 
 
     "label":"expenses_veterinary", 
 
     "name":"expenses veterinary", 
 
     "total":0, 
 
     "type":"income" 
 
    } 
 
}; 
 

 
var res = Object.keys(obj).filter(item => { return obj[item].type == 'expense' }); 
 

 
for (var i in res) { 
 
    document.getElementById("result").innerHTML = obj[res[i]].label; 
 
}
<div id="result"> 
 
</div>

関連する問題