如何从Object Array Javascript中获取唯一值

Eem*_*Jee 0 javascript arrays duplicates

所以我有一个对象数组,如下所示:

var array = [
    {name:"Joe", date:'2018-07-01', amt:250 },
    {name:"Mars", date:'2018-07-01', amt:250 },
    {name:"Joe", date:'2018-07-02', amt:250 },
    {name:"Saturn", date:'2018-07-01', amt:250 },
    {name:"Joe", date:'2018-07-02', amt:250 },
    {name:"Jupiter", date:'2018-07-01', amt:250 },
]
Run Code Online (Sandbox Code Playgroud)

我想这取决于如果过滤数据name,amountdate有重复.这个甚至不会过滤重复的名称.

var unique = array.filter((v, i, a) =>{ return a.indexOf(v) === i});
Run Code Online (Sandbox Code Playgroud)

我怎样才能过滤重复这一个基础上name,amountdate

Leo*_*lia 10

Array.prototype.filter与 的解决方案Set

var data=[{name:"Joe",date:"2018-07-01",amt:250},{name:"Mars",date:"2018-07-01",amt:250},{name:"Joe",date:"2018-07-02",amt:250},{name:"Saturn",date:"2018-07-01",amt:250},{name:"Joe",date:"2018-07-02",amt:250},{name:"Jupiter",date:"2018-07-01",amt:250}];

var filtered = data.filter(function({name, date, amt}) {
    var key = `${name}${date}${amt}`;
    return !this.has(key) && this.add(key);
}, new Set);

console.log(filtered);
Run Code Online (Sandbox Code Playgroud)

  • 非常优雅地使用回调 thisarg (2认同)

小智 7

试试这段代码,它只返回唯一的对象.

var data = [
{name:"Joe", date:'2018-07-01', amt:250 },
{name:"Mars", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Saturn", date:'2018-07-01', amt:250 },
{name:"Joe", date:'2018-07-02', amt:250 },
{name:"Jupiter", date:'2018-07-01', amt:250 },
]
var resArr = [];
data.filter(function(item){
  var i = resArr.findIndex(x => (x.name == item.name && x.date == item.date && x.amt == item.amt));
  if(i <= -1){
        resArr.push(item);
  }
  return null;
});
console.log(resArr)
Run Code Online (Sandbox Code Playgroud)

请告诉我这不是你想要的.

  • 抱歉,这个答案太糟糕了。如果您将项目推送到数组中,为什么要使用“过滤器”?为什么你返回null?为什么在 2018 年使用 function/var?有很多功能性的方法可以实现这个结果,这不是其中之一 (2认同)

moj*_*ani 6

试试这个:

     var array = [
        {name:"Joe", date:'2018-07-01', amt:250 },
        {name:"Mars", date:'2018-07-01', amt:250 },
        {name:"Joe", date:'2018-07-02', amt:250 },
        {name:"Saturn", date:'2018-07-01', amt:250 },
        {name:"Joe", date:'2018-07-02', amt:250 },
        {name:"Jupiter", date:'2018-07-01', amt:250 },
    ]

    var unique = Array.from(new Set(array.map(JSON.stringify))).map(JSON.parse);
    
    console.log(unique)
Run Code Online (Sandbox Code Playgroud)

  • 如果数组中的元素之一是 `{amt:250,name:"Jupiter",date"2018-07-01"}` (即不同属性顺序中的相同数据),则不起作用 (6认同)
  • 糟糕的表现:) (5认同)

Isa*_*aac 5

var array = [
    {name:"Joe", date:'2018-07-01', amt:250 },
    {name:"Mars", date:'2018-07-01', amt:250 },
    {name:"Joe", date:'2018-07-02', amt:250 },
    {name:"Saturn", date:'2018-07-01', amt:250 },
    {name:"Joe", date:'2018-07-02', amt:250 },
    {name:"Jupiter", date:'2018-07-01', amt:250 },
]

let answer = [];

array.forEach(x => {
  if(!answer.some(y => JSON.stringify(y) === JSON.stringify(x))){
    answer.push(x)
  }
})

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

替代解决方案。您可以使用 Array#forEach、Array#some、JSON.stringify 来实现您想要的