【问题标题】:ng-repeat in angularJs avoid duplicate valuesangularJs 中的 ng-repeat 避免重复值
【发布时间】:2016-04-16 18:41:34
【问题描述】:

我有这样的对象

{
        {
          "assetId" : "560",
          "assetName" : "Testname",
          "message" : "hai",
          "timestamp" : 1452585984181
        },
         {
          "message" : "haii",
          "timestamp" : 1452585999592
        },
       {
          "assetId" : "560",
          "assetName" : "Testname",
          "message" : "heloo",
          "timestamp" : 1452586221604
        }
      }

显示这个对象我正在使用ng-repeat。我的问题是

我需要使用ng-repat 显示所有消息,这些消息属于单个assetName。但在这个对象中,两个对象具有相同的assetNameassetId。我需要显示两个相同对象的消息,但不需要在顶部重复显示 assetName

我怎样才能避免重复的assetNameassetId。我用过

<div class="container" data-ng-repeat="data in dataList | unique:'assetId'">

但它完全删除了对象。我需要来自所有对象的消息。

有可能吗,请帮忙 这是我期待的输出。:

【问题讨论】:

  • 在分配给dataList范围之前解析json并删除重复的Id。
  • 那你为什么用unique呢?不清楚预期的结果是什么

标签: angularjs angularjs-ng-repeat


【解决方案1】:

我认为您应该创建自己的自定义过滤器

yourApp.filter('customuniqueFilter', function() {
    return function( array, propertyThatMustBeUnique) {
        var newArray = [];
        for (i = 0; i++; i < array.length){
            if ( notYetInYourArray ){    // I was too lazy to think about a way to do it ;-) feel free to update my answer
                newArray.push(array[i]);
            }
        }
        return newArray;
    }
});

然后像这样使用它:

<div class="container" data-ng-repeat="data in dataList | customunique:'assetId'">

【讨论】:

  • 感谢您的回复。你能帮我更新过滤器吗
  • 此过滤器接收array 作为参数,并返回将显示的newArray。你“只是”需要做的是检查项目是否已经进入newArray,否则,将项目推入newArray
【解决方案2】:

这个怎么样:

<div class="container" data-ng-repeat="data in dataList | unique:'assetId'">
    <span>{{data.assetId}}</span>
    <div data-ng-repeat="data2 in dataList | filter:(data.assetId === undefined ? {assetId:'!'} : data.assetId)">
        <span>{{data2.message}}</span>
    </div>
</div>

【讨论】:

  • 感谢您的回复。但我只得到assetId,没有得到data2中的其他值。
  • @Kichu 我编辑了我的答案。我的测试中有一个copypasta。立即检查。
  • 它正在删除多个assetId,但消息重复3次。我不知道实际问题@Egan
  • 结果应该是560 hai heloo haii。你没有告诉我们你想如何显示你的数据,所以我做了一个简单的例子。您可以在spans 的开头添加Data:Data2:,这样您就可以看到它是如何工作的。
  • 这是聊天应用程序。所以消息只想显示一次。在唯一资产 ID 下,我将更新屏幕截图
猜你喜欢
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2015-07-17
相关资源
最近更新 更多