Ember.js 计算:从数组到 return 单个对象的最短路径

Ember.js computed: Shortest way to return single object from array

给定具有 ID 的对象数组:

array: [
    {id: 3, value: 'foo'},
    {id: 6, value: 'bar'},
    {id: 9, value: 'baz'},
    // ...
],

从匹配 id 的数组中 return 单个对象的最短路径是什么? 请记住,在加载模型时,数组可以是 undefined。在这种情况下,计算出的 属性 也应该 return undefined.

这个有效:

_test       : computed.filterBy('array', 'id', 6),
test        : computed.alias('_test.firstObject')

不过不好看,用的是临时变量

这个比较好:

test        : computed('array.[]', function() {
    let array = this.get('array')
    if (array) return array.find(el => el.id == 6)
})

但它并不漂亮,因为它使用了 4 行。

Ember 包含很多语法糖,但我还没想出如何缩小它。

方法 filterfilterBy 会将数组缩减为您要筛选的项目列表。

如果您想要列表中的单个项目,请使用 findfindBy

在您的情况下,您将使用以下内容。

test: computed('array.[]', function() {
    return this.getWithDefault('array',[])
        .findBy('id',6)
})

完成后,this.get('test') 将 return {id: 6, value: 'bar'}

可以在 MutableArray

的文档中找到更多信息