通过object.property

时间:2017-04-06 04:10:29

标签: javascript arrays

我想要实现的是过滤objects数组,以便获得具有唯一 actor的对象数组。

所以这就是我现在所拥有的:



var objects = [{
    actor: {
      account: null,
      degraded: false,
      mbox: null,
      mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
      name: "name",
      openid: null
    },
    capture: 'value'
  },
  {
    actor: {
      account: null,
      degraded: false,
      mbox: null,
      mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec12345",
      name: "name2",
      openid: null
    },
    capture: 'value2'
  },
  {
    actor: {
      account: null,
      degraded: false,
      mbox: null,
      mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
      name: "name",
      openid: null
    },
    capture: 'value3'
  }
];


objects.filter((value, index, self) => {
  return self.indexOf(value) === index;
}).map(ele => {
  console.log(ele.capture);
});




但正如您所看到的,目前它不会过滤任何数组元素。

起初我认为return self.indexOf(value.value) === index;可以解决这个问题,但这会返回一个空数组。

期望的结果是一个数组,它不包含最后一个数组元素,因为这个actor属性与第一个数组元素匹配。

预期结果是:

[{
    actor: {
      account: null,
      degraded: false,
      mbox: null,
      mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
      name: "name",
      openid: null
    },
    capture: 'value'
  },
  {
    actor: {
      account: null,
      degraded: false,
      mbox: null,
      mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec12345",
      name: "name2",
      openid: null
    },
    capture: 'value2'
  }
];

1 个答案:

答案 0 :(得分:3)

数组中的对象都是不同的对象,即使某些对象碰巧具有相同值的属性。 public static int indexOfMostRightSmallest(int[] a) { return binaryLast(a, a[0]); } public static void main(String[] args) { int[] a = { 5, 5, 5, 5, 5, 5, 5, 5, 6, 8, 9, 9, 10 }; System.out.println(indexOfMostRightSmallest(a)); } 函数正在比较引用,而不是属性值。

此外,实际上,三个对象中没有一个具有相同的属性,因为它们都具有不同的7 Stats: min=4, max=4, avg=4.0 值。

使用.findIndex()代替<div class="list-group" style="height:50px"> <span href="#" class="list-group-item active"> Inbox </span> <div ng-repeat="record in inboxlist.Result"> <a class='list-group-item' ng-click="viewDates($index);">{{record.customer_name}}</a> </div> </div> ,以便您可以比较属性以查找匹配的对象:

.indexOf()

我只是使用.capture属性,但当然您可以根据需要比较其他属性。

(请注意.indexOf()是ES6函数,但我认为您的代码已经使用了箭头函数,这很好。或者您可以polyfill it。)

&#13;
&#13;
objects.filter((value, index, self) => {
  return self.findIndex(v => v.actor.name === value.actor.name) === index;
})
&#13;
&#13;
&#13;