jQuery基于特定对象属性的唯一对象

Lal*_*alu 6 javascript jquery

我想要一个唯一对象数组,删除具有一些特定属性值的重复对象.例如:在下面的代码片段中,event1和event2具有相同的标题和相同的起始值,event3和event4具有相同的标题但开始时间不同.

我想从对象数组中删除event2(因为它具有与event1相同的标题和起始值),但不是event4(因为它只有相同的标题).

我的代码看起来像:

var event1 = {id: 1, title: 'ABC', start: '10'};
var event2 = {id: 2, title: 'ABC', start: '10'};
var event3 = {id: 3, title: 'DEF', start: '12'};
var event4 = {id: 4, title: 'DEF', start: '20'};

var a=[];
a.push(event1);
a.push(event2);
a.push(event3);
a.push(event4);


//I tried this, but this code checks for title only.
var titles = [];
var b = [];

$.each(a, function(index, event) {
    if ($.inArray(event.title, titles) === -1) {
      titles.push(event.title);
      b.push(event);
    }
});

console.log(b); //Gives output as [Object { id=1, title="ABC", start="10"}, Object { id=3, title="DEF", start="12"}]
// The right output should be: [Object { id=1, title="ABC", start="10"}, Object { id=3, title="DEF", start="12"}, Object { id=3, title="DEF", start="20"}]
Run Code Online (Sandbox Code Playgroud)

我上面的代码只检查标题.我无法使它适用于两个不同的属性.我在这里先向您的帮助表示感谢.

Fur*_*far 14

试试这个:

var event1 = {id: 1, title: 'ABC', start: '10'};
var event2 = {id: 2, title: 'ABC', start: '10'};
var event3 = {id: 3, title: 'DEF', start: '12'};
var event4 = {id: 4, title: 'DEF', start: '20'};

var events = [event1, event2, event3, event4];

var result = events.reduce(function(memo, e1){
  var matches = memo.filter(function(e2){
    return e1.title == e2.title && e1.start == e2.start
  })
  if (matches.length == 0)
    memo.push(e1)
    return memo;
}, [])

console.log(result)
Run Code Online (Sandbox Code Playgroud)


dre*_*cat 6

对于文档,使用 jQuery:

$.each(a, function(index, event) {
    var events = $.grep(b, function (e) {
        return event.title === e.title &&
            event.start === e.start;
    });
    if (events.length === 0) {
      b.push(event);
    }
});
Run Code Online (Sandbox Code Playgroud)

演示