2017-06-05 54 views
-1

我有一个API返回给我一个JSON,其中的音符范围从1到5,我需要在变量中存储一定数量的音符。在变量中保存相同音符的数量 - Angular 2

例子:

var n1 = 5; // Quantity of 10 notes with a value of 1 - [1,1,1,1,1] 
var n2 = 3; // Quantity of 3 notes with a value of 2 - [2,2,2] 
var n3 = 4; // Quantity of 4 notes with a value of 3 - [3,3,3,3] 

我的JSON看起来是这样的:

[ 
    { 
    "author": "Lorem ipsum", 
    "note": "5", 
    "description": "Lorem ipsum dolor sit amet" 
    } 
] 

而且我用这个代码是这样的:

numNotas() { 
    this.http.get(this.url).map(res => res.json()) 
    .subscribe(data => { 
     console.log(data); 
    }); 
} 

我试图用类似console.log(data.note)试图列出只有数字,我可以尝试一些东西来保存相同的音符在respecti ve变量,但console返回我undefined。那么,我怎么能得到这些相同的笔记,并以正确的方式将它们保存在变量中呢?

+0

请注明您所使用angular2和rxjs在你的标签。 – WilomGfx

+0

@WilomGfx是的。我可以正常打印数据。我的问题是真的将变量保存在变量中。 –

回答

2

请在您的rxjs流中的.map()操作后尝试以下代码。您可能需要导入reduce运营商import 'ngrx/add/operators/reduce

const json = [ 
 
    { note: "5" }, 
 
    { note: "5" }, 
 
    { note: "5" }, 
 
    { note: "3" }, 
 
    { note: "3" }, 
 
] 
 

 
console.log(
 
    json 
 
    .map(obj => parseInt(obj.note)) 
 
    .reduce((acc, val) => { 
 
     acc[val]++ 
 
     return acc 
 
    }, { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0}) 
 
)

+0

工作完美!只是另一个问题,我怎么能检索另一个函数中的变量?那么,我将需要他们来计算平均等级。 –

+0

如果你把它放在'map()'和'subscribe()'之间,你可以用'data.1'或'data [1]'来访问它。如果您还需要访问其他数据,请将其保留在rxjs流中,并将其放入您的'subscribe()'方法(或任何您需要它的位置)并将其分配给一个变量,它将与vanilla JavaScript一起工作以及rxjs。 (如果你接受我的答案,它也会很好,如果它对你有用:)) – schrej

+0

我明白了,谢谢! –