我有一个包含不同属性对象的数组。其中有一些对象具有相似的属性。例如,
var array=[{'property':1},{'property':2},{'property':1}]
如何使用Ember.js获取具有唯一属性的数组?
最终我需要一个具有唯一属性的数组。
[{'property':1},{'property':2}]
非常感谢您的帮助。
更新:我尝试使用uniq()方法,但这不允许像Ember一样通过sorting传递属性。
谢谢!
我有一个包含不同属性对象的数组。其中有一些对象具有相似的属性。例如,
var array=[{'property':1},{'property':2},{'property':1}]
[{'property':1},{'property':2}]
非常感谢您的帮助。
更新:我尝试使用uniq()方法,但这不允许像Ember一样通过sorting传递属性。
谢谢!
var arrayName=[{'property':1},{'property':2},{'property':1}]
arrayName.uniqBy('property');
这将返回以下内容 =>
var arrayName=[{'property':1},{'property':2}]
uniqBy返回一个新的可枚举对象,其中只包含具有唯一属性值的项。默认实现无论接收方类型如何都会返回一个数组。(Ember指南链接)
filter
方法与isAny
方法结合使用。App.IndexController = Ember.ArrayController.extend({
unique: function(){
var model = this.get('model');
var uniqueObjects = [];
return model.filter(function(item){
if(!uniqueObjects.isAny('property', item.property)){
uniqueObjects.push(item);
return true;
}
return false;
});
}.property('model')
});
在这里查看工作的示例。
unique
属性,无论它位于控制器还是组件内部。;) - Kalman使用 forEach
的类似解决方案(不要忘记使用 get
获取 item.get('property')
):
unique: Em.computed('model', function() {
var uniqueObjects = [];
this.get('model').forEach(function(item) {
if (!uniqueObjects.isAny('property', item.get('property'))) {
uniqueObjects.addObject(item);
}
});
return uniqueObjects;
})