javascript – ember.js – 从数组中提取不同的属性

前端之家收集整理的这篇文章主要介绍了javascript – ember.js – 从数组中提取不同的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让我说我有以下数组,这在我的控制器中使用
songs = [
  {trackNumber: 4,title: 'Ob-La-Di,Ob-La-Da',genre: 'pop'},{trackNumber: 2,title: 'Back in the U.S.S.R.',genre: 'rock'},{trackNumber: 3,title: 'Glass Onion',];

我想在我的控制器上有一个属性返回一系列独特的流派

例如

genres: function() {
  ...
}...

在这种情况下会返回

['pop','rock']

有没有一些优雅的方式来做这个与ember,使用计算属性a或观察者?

解决方法

我的原始答案在底部,但最新的Ember版本为此提供了一个非常好的新解决方案:
genres: Ember.computed.mapBy('songs','genre'),uniqueGenres: Ember.computed.uniq('genres'),

参考文献:mapByuniq.计算的属性宏是伟大的=)

以前的答案:

genres: function() {
  return this.get('songs').map(function(song){
    return song.genre
  }).filter(function(genre,index,arr){
    return arr.indexOf(genre) == index // throw away any instances which are not first
  })
}.property('songs'),

请注意,如果您需要支持较旧的浏览器,我将利用“现代”数组函数(如地图和过滤器),您需要对其进行垫片或以另一种方式写入.用于删除重复项的过滤器是我发生的第一个过滤器,它可能不是很好的,如果已经加载了一个独特功能的库(如underscore.uniq),那么应该使用它.

很少这是Ember具体的当然,最后的.property(‘歌曲’)是字面上所有你需要指定这是一个计算的属性,如果歌曲更改(将假定为Ember 1.0)将被缓存和重新计算

参考文献:
mapfilter的MDN

原文链接:https://www.f2er.com/js/152124.html

猜你在找的JavaScript相关文章