Angular:如何使用特定键过滤 json
Angular: How to filter json with specific keys
我从已选中的多选项目中得到 json。如何仅根据以下原始 json:
中的特定键过滤 json
原文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
}]
}
在下面的代码中,我试图在为 "selectedRewards"
调用 "push" 之前仅获取 RewardType、RewardCode 和 DiscountType
Angular代码:
$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代码:
<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>
这是预期的 json 我试图得到:
{
"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
}]
}
我真的不明白在你的代码中存储 json 的变量是什么,但是假设你的变量叫做 myJson
并且对应于你原来的 json已分享。要获得预期的 json 你会这样做:
var expectedJson = {
Reward: myJson.Reward.map(function(item) {
return {
RewardType: item.RewardType,
RewardCode: item.RewardCode,
DiscountValue: item.DiscountValue
}
})
}
如果您不熟悉,请查看 Array.prototype.map
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
以下解决了我的问题:
代码:
$scope.rewards.push({"RewardType":selectedRewards.RewardType, "RewardCode":selectedRewards.RewardCode," "DiscountValue":selectedRewards.DiscountValue});
我从已选中的多选项目中得到 json。如何仅根据以下原始 json:
中的特定键过滤 json原文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
}]
}
在下面的代码中,我试图在为 "selectedRewards"
调用 "push" 之前仅获取 RewardType、RewardCode 和 DiscountTypeAngular代码:
$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代码:
<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>
这是预期的 json 我试图得到:
{
"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
}]
}
我真的不明白在你的代码中存储 json 的变量是什么,但是假设你的变量叫做 myJson
并且对应于你原来的 json已分享。要获得预期的 json 你会这样做:
var expectedJson = {
Reward: myJson.Reward.map(function(item) {
return {
RewardType: item.RewardType,
RewardCode: item.RewardCode,
DiscountValue: item.DiscountValue
}
})
}
如果您不熟悉,请查看 Array.prototype.map
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
以下解决了我的问题:
代码:
$scope.rewards.push({"RewardType":selectedRewards.RewardType, "RewardCode":selectedRewards.RewardCode," "DiscountValue":selectedRewards.DiscountValue});