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 包含很多语法糖,但我还没想出如何缩小它。
方法 filter
和 filterBy
会将数组缩减为您要筛选的项目列表。
如果您想要列表中的单个项目,请使用 find
或 findBy
。
在您的情况下,您将使用以下内容。
test: computed('array.[]', function() {
return this.getWithDefault('array',[])
.findBy('id',6)
})
完成后,this.get('test')
将 return {id: 6, value: 'bar'}
可以在 MutableArray
的文档中找到更多信息
给定具有 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 包含很多语法糖,但我还没想出如何缩小它。
方法 filter
和 filterBy
会将数组缩减为您要筛选的项目列表。
如果您想要列表中的单个项目,请使用 find
或 findBy
。
在您的情况下,您将使用以下内容。
test: computed('array.[]', function() {
return this.getWithDefault('array',[])
.findBy('id',6)
})
完成后,this.get('test')
将 return {id: 6, value: 'bar'}
可以在 MutableArray
的文档中找到更多信息