2017-11-12 3 views
0

Ich erhalte einen json von multiselect Gegenständen, die überprüft werden. Wie kann ich json filtern, um nur auf der Grundlage spezifischen Schlüssel aus dem unter dem ursprünglichen json:Angular: Wie man json mit spezifischen Schlüsseln filtert

Original-Json:

{ 
     "Reward": [{ 
      "RewardType": 1, 
      "RewardTypeValue": "PartCodes", 
      "RewardCode": "CB_USD_20_US", 
      "DiscountValue": 20.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardTypeValue": "PartCodes", 
      "RewardCode": "CB_USD_30_US", 
      "DiscountValue": 30.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardTypeValue": "PartCodes", 
      "RewardCode": "CB_USD_40_US", 
      "DiscountValue": 40.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardTypeValue": "PartCodes", 
      "RewardCode": "CB_USD_50_US", 
      "DiscountValue": 50.0 
     }] 

    } 

An diesem Code unten, ich versuche nur RewardType, RewardCode und DiscountType vor dem Aufruf von „Push-to bekommen "für "selectedRewards"

Angular Code:

$scope.rewards = []; 
$scope.toggleSelection = function toggleSelection(selectedRewards) { 
    var idx = $scope.rewards.indexOf(selectedRewards); 
    console.log(selectedRewards); 

    // is currently selected 
    if (idx > -1) { 
    $scope.rewards.splice(idx, 1); 
    } 

    // is newly selected 
    else { 

    $scope.rewards.push(selectedRewards); 
    } 
    console.log($scope.rewards); 
}; 

Html-Code:

<li ng-repeat="reward in RewardsList "> 
      <input id="{{reward.RewardCode}}.{{reward.RewardType}}" 
        type="checkbox" 
        ng-checked="selection.indexOf(reward.RewardCode) > -1" 
        ng-click="toggleSelection(reward)" 
        value="{{reward.RewardCode}}" /> 
    <label for="{{reward.RewardCode}}">{{reward.RewardCode}}</label> 
    </li> 

hier ist die erwartete json ich zu bekommen versuche:

{ 
     "Reward": [{ 
      "RewardType": 1, 
      "RewardCode": "CB_USD_20_US", 
      "DiscountValue": 20.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardCode": "CB_USD_30_US", 
      "DiscountValue": 30.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardCode": "CB_USD_40_US", 
      "DiscountValue": 40.0 
     }, 
     { 
      "RewardType": 1, 
      "RewardCode": "CB_USD_50_US", 
      "DiscountValue": 50.0 
     }] 

    } 
+0

Nicht genug bekannt oder gezeigt. Wir haben keine Ahnung woher 'selectedRewards' kommt oder welche Ergebnisse erwartet werden. Bitte geben Sie eine detailliertere Erklärung und ein [mcve] – charlietfl

+0

erwartetes Ergebnis ist Json minus der "RewardTypeValue" Schlüssel/Wert. – Ajax

+0

Sorry ... genauer mit erwarteten Ergebnissen – charlietfl

Antwort

1

Die folgende feste mein Problem:

Code:

$scope.rewards.push({"RewardType":selectedRewards.RewardType, "RewardCode":selectedRewards.RewardCode," "DiscountValue":selectedRewards.DiscountValue}); 
2

Ich weiß nicht wirklich, was die Variable ist, die die json in Ihrem Code speichert, aber lassen Sie uns sagen, dass Ihre Variable myJson genannt wird und entspricht dem ursprünglichen JSON, den Sie geteilt haben. Um die erwartete json zu erhalten würden Sie tun:

var expectedJson = { 
    Reward: myJson.Reward.map(function(item) { 
    return { 
    RewardType: item.RewardType, 
    RewardCode: item.RewardCode, 
    DiscountValue: item.DiscountValue 
    } 
    }) 
} 

Werfen Sie einen Blick auf Array.prototype.map, wenn Sie nicht mit ihm vertraut sind: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

+0

, um die Nachricht clientlibs.min.js zu erhalten: formatiert: 3289 TypeError: Eigenschaft 'map' von undefined kann nicht gelesen werden. Ich benutze eckige 1.4 – Ajax

+0

Beantwortung Ihrer ersten Frage: selectedRewards erhalten das Original-JSON. Es ist ein dynamischer Aufruf, daher ist die Array-JSON-Größe nicht definiert. – Ajax

+0

also rufe die paar Codezeilen an, die ich geschrieben habe, kurz nachdem deine 'selectedRewards'-Variable gefüllt ist (ich würde sagen, vorher warst du dran) – ValLeNain

Verwandte Themen