如何使用Ember JS获取具有唯一属性值的数组

4

我有一个包含不同属性对象的数组。其中有一些对象具有相似的属性。例如,

var array=[{'property':1},{'property':2},{'property':1}]

如何使用Ember.js获取具有唯一属性的数组?
最终我需要一个具有唯一属性的数组。
[{'property':1},{'property':2}]

非常感谢您的帮助。

更新:我尝试使用uniq()方法,但这不允许像Ember一样通过sorting传递属性。

谢谢!


你尝试过什么吗?发一下看看问题出在哪里? - Jai
3
看看 Lodash 吧 - 我在 Node 和 Ember 应用程序中都用它来处理这种事情。 - user156888
3个回答

9
我们可以使用Ember的uniqBy方法只用一行代码就能完成。假设我们有以下数组 =>
var arrayName=[{'property':1},{'property':2},{'property':1}]

为获取一个唯一的数组,您需要执行以下步骤 =>
arrayName.uniqBy('property');

这将返回以下内容 =>

var arrayName=[{'property':1},{'property':2}]

uniqBy返回一个新的可枚举对象,其中只包含具有唯一属性值的项。默认实现无论接收方类型如何都会返回一个数组。(Ember指南链接


@user1438823 如果您已经得到了解决方案,请标记正确的答案。 - siwalikm

4
一种方法是使用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')
});

示例:

在这里查看工作的示例


ArrayController 将在 Ember 1.11 中被弃用。 - saygun
2
当然。示例的主要重点是unique属性,无论它位于控制器还是组件内部。;) - Kalman

2

使用 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;
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接