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

Ember JS how to get an array with unique property values

本文关键字:唯一 属性 数组 JS 何获取 获取 Ember      更新时间:2023-09-26

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

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

如何使用 ember js 获取具有唯一属性的数组?

最后,我需要一组

[{'property':1},{'property':2}]

非常感谢您的帮助。

更新:我尝试了uniq()方法。但这不允许传递属性,因为余烬允许排序。

谢谢!

我们可以使用 Ember 的 uniqBy 方法在一行代码中做到这一点。

假设我们有这个数组 =>

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

要获得唯一的数组,您需要执行以下操作 =>

arrayName.uniqBy('property');

这将返回以下内容 =>

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

uniqBy 返回一个新的枚举对象,该枚举仅包含包含唯一属性值的项。默认实现返回一个数组,而不考虑接收器类型。(链接到余烬指南)

一种方法

是将 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')
});

这里的工作示例

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