【问题标题】:How to format JSON data within controller如何在控制器中格式化 JSON 数据
【发布时间】:2017-04-25 08:38:14
【问题描述】:

我是 AngularJS 和 JSON 的新手。我被困在这个阶段,我想过滤 JSON 中不必要的字段。

我在控制器中使用了代码:

var data = $scope.choices; // Is an array
var datav = (JSON.stringify(data)); // array converted into a string need to be filtered
alert(datav);

如果我 alert(datav) 正在获取下面提到的 JSON 数据。

[{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}]

我只想要“标题”我不想要$$hashKeyid。如何做到这一点?

【问题讨论】:

标签: javascript angularjs arrays json


【解决方案1】:

您可以使用angular.toJson 代替JSON.stringify,这会为您省略$$hashkey

angular.toJson

将输入序列化为 JSON 格式的字符串。由于 AngularJS 在内部使用这种表示法,带有前导 $$ 字符的属性将被删除。

这样,

var myobj = [{
  "title": "g",
  "$$hashKey": "object:3"
}, {
  "id": "choice2",
  "$$hashKey": "object:6",
  "title": "ghgh"
}, {
  "id": "choice3",
  "$$hashKey": "object:11",
  "title": "fgh"
}]

console.log(angular.toJson(myobj))
console.log(JSON.stringify(myobj))
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

编辑:如果您只想显示某些属性,请使用Array.map,如其他答案中所述。 angular.toJson 只有在您想省略 $$hashkey 并保留其他所有内容时才会有帮助此处

【讨论】:

  • @PrashanthHarish 当然,我觉得这个问题有点误导,会为你编辑。您可以在这里接受其他合适的答案
【解决方案2】:

你可以使用Array.map()函数来实现你想要的,只返回你感兴趣的属性

var data = [{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}];

var datav = data.map(d => ({title: d.title}));

console.log(datav)

【讨论】:

    【解决方案3】:

    试试这个

    <html>
    <head>
    	<script Src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>
    
    	<script>
    		var app=angular.module("myapp", []);
    		app.controller("namesctrl", function($scope){
                var data = [{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}];
                var data1 = data.map(d => ({title: d.title}));
                console.log(data1);
    		});
    
    		
    	</script>
    
    
    </head>
    <body ng-app="myapp" ng-controller="namesctrl">
    
    </body>
    </html>

    【讨论】:

    • 什么是str??确保它是一个数组。
    • 那是字符串 na??您将数组字符串化为字符串..现在解析它然后使用.map
    【解决方案4】:

    您可以使用Array.prototype.map

    当您第一次收到您的阵列时:

     const data = [
      {title: "hello" , "unwanted" : 34},
      {title: "hello" , "unwanted" : 35},
      {title: "hello" , "unwanted" : 36},
      {title: "hello" , "unwanted" : 37},
    
    ]
    
    
    
    const wanted = data.map( d => {
      return {title: d.title}
    });
    
    console.log(wanted);
    

    【讨论】:

    • am gettin log as [undefined, undefined]。
    • @PrashanthHarish 我的错误,我犯了一个轻微的语法错误。看看这个JSbin
    【解决方案5】:
    var data = $scope.choices.map(function(index,item){
        return {id: item.id};
    }); 
    

    这就是你如何从选择数组中映射你需要的对象

    【讨论】:

    • 他要的是title,而不是id
    • 我给了他使用地图功能背后的想法,他一定可以解决他的需要。
    【解决方案6】:

    我相信您使用的是第三方库。我的猜测是Angular Material,它将类似的$$haskey 属性添加到下拉数组值中。理想情况下,这不应该对您的数组进行任何更改,并且您仍然应该能够在数组对象上获取您的属性。

    但是,如果您特别想删除这些不需要的属性,您应该使用.map 函数从该数组中创建一个新数组。示例:

    var newArray= orginalArray.map(element => ({title: element.title}));
    

    您可以根据需要取出任意数量的属性并留下不需要的属性。您的新数组与旧数组完全不同。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      相关资源
      最近更新 更多