简体   繁体   English

通过 knockout.js 从对象数组中删除重复项或区别

[英]Remove duplicates or distinction from array of objects by knockout.js

How to remove duplicates objects from an array by using Knockout.js如何使用 Knockout.js 从数组中删除重复对象

   var ticketgroups = [
      {TicketGroup: TicketGroup1, SortOrder: 1},
      {TicketGroup: TicketGroup1, SortOrder: 1},
      {TicketGroup: TicketGroup2, SortOrder: 2},
      {TicketGroup: TicketGroup2, SortOrder: 2},
      {TicketGroup: TicketGroup3, SortOrder: 3},
      {TicketGroup: TicketGroup3, SortOrder: 3},
    ];

Output should be输出应该是

 var filltered = [
          {TicketGroup: TicketGroup1, SortOrder: 1},
          {TicketGroup: TicketGroup2, SortOrder: 2},
          {TicketGroup: TicketGroup3, SortOrder: 3},
        ];

How to bind on my views.如何绑定我的观点。

<select id="customticketgroup" data-bind="options: $root.filltered.TicketGroup"/>

If SortOrder is supposed to be a unique value, you can use it to filter out duplicates.如果SortOrder应该是一个唯一值,您可以使用它来过滤掉重复项。 The example below uses a Map to ensure there's only one value per sort order.下面的示例使用Map来确保每个排序顺序只有一个值。

 function uniquesBy(getKey, xs) { return Array.from( new Map( xs.map(x => [getKey(x), x]) ).values() ) } const TicketGroup1 = "Ticket Group 1"; const TicketGroup2 = "Ticket Group 2"; const TicketGroup3 = "Ticket Group 3"; const ticketgroups = [ {TicketGroup: TicketGroup1, SortOrder: 1}, {TicketGroup: TicketGroup1, SortOrder: 1}, {TicketGroup: TicketGroup2, SortOrder: 2}, {TicketGroup: TicketGroup2, SortOrder: 2}, {TicketGroup: TicketGroup3, SortOrder: 3}, {TicketGroup: TicketGroup3, SortOrder: 3}, ]; ko.applyBindings({ filtered: uniquesBy(g => g.SortOrder, ticketgroups) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <select data-bind=" options: filtered, optionsText: 'TicketGroup' "></select>

If your ticketgroups array is actually an observableArray , you can use a pureComputed for filtered .如果您的 ticketgroups 数组实际上是observableArray ,您可以使用pureComputed进行filtered If you're only interested in the TicketGroup property after sorting, you could chain a .map(g => g.TicketGroup) to extract the values.如果您在排序后只对TicketGroup属性感兴趣,则可以链接.map(g => g.TicketGroup)来提取值。

 function uniquesBy(getKey, xs) { return Array.from( new Map( xs.map(x => [getKey(x), x]) ).values() ) } const TicketGroup1 = "Ticket Group 1"; const TicketGroup2 = "Ticket Group 2"; const TicketGroup3 = "Ticket Group 3"; const ticketgroups = ko.observableArray([ {TicketGroup: TicketGroup1, SortOrder: 1}, {TicketGroup: TicketGroup1, SortOrder: 1}, {TicketGroup: TicketGroup2, SortOrder: 2}, {TicketGroup: TicketGroup2, SortOrder: 2}, {TicketGroup: TicketGroup3, SortOrder: 3}, {TicketGroup: TicketGroup3, SortOrder: 3}, ]); ko.applyBindings({ filtered: ko.pureComputed(() => uniquesBy(g => g.SortOrder, ticketgroups()) .map(g => g.TicketGroup) ) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <select data-bind=" options: filtered "></select>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM