gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:54:39 24 4
gpt4 key购买 nike

假设我有以下数组,它在我的 Controller 中使用

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', genre: 'pop'},
];

我想在我的 Controller 上有一个返回独特流派数组的属性

例如

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

在这种情况下会返回

['pop', 'rock']

有没有一些优雅的方法可以使用 ember,使用计算属性或观察者来做到这一点?

最佳答案

我原来的答案在底部,但最新的 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'),

请注意,我在这里利用了“现代”数组函数,例如 map 和 filter,如果您需要支持较旧的浏览器,则需要填充这些函数或以其他方式编写。我用于删除重复项的过滤器是我想到的第一个过滤器,它的性能可能不是很好,如果您已经加载了一个具有独特功能的库(如 underscore.uniq),您应该使用它。

当然,其中很少是 Ember 特有的,最后的 .property('songs') 就是您需要指定的所有内容,它是一个计算属性,它将被缓存和如果歌曲发生变化则重新计算(假设是 Ember 1.0)

引用资料:MDN mapfilter

关于javascript - ember.js - 从数组中提取不同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com