检查数组中是否有相同的元素

时间:2017-11-14 14:04:57

标签: javascript arrays lodash

我有一个数组:

var objects = [
    {product:'123', options:{cap:'', fort:'', count:1}},
    {product:'123', options:{cap:'', fort:'', count:1}},
    {product:'12', options:{cap:'', fort:'', count:1}},
    {product:'1234', options:{cap:'123', fort:'', count:1}},
    {product:'1234', options:{cap:'', fort:'', count:1}}
];

我需要以这种方式过滤这个数组:

(product === product && options !== options) || (product !== product && options == options)

这意味着该数组应如下所示:

var objects = [
    {product:'123', options:{cap:'', fort:'', count:1}},
    {product:'1234', options:{cap:'123', fort:'', count:1}},
    {product:'12', options:{cap:'', fort:'', count:1}},
    {product:'1234', options:{cap:'', fort:'', count:1}}
];

1 个答案:

答案 0 :(得分:0)

尝试这种(不是那么有效但简单)的方法

objects.map((s)=> JSON.stringify(s)).filter( (s,i,a)=> a.indexOf(s,i+1) == -1 ).map((s)=> JSON.parse(s));

<强>演示

&#13;
&#13;
var objects = [
{product:'123', options:{cap:'', fort:'', count:1}},
{product:'123', options:{cap:'', fort:'', count:1}},
{product:'12', options:{cap:'', fort:'', count:1}},
{product:'1234', options:{cap:'123', fort:'', count:1}},
{product:'1234', options:{cap:'', fort:'', count:1}}
];

objects = objects.map((s)=> JSON.stringify(s)).filter( (s,i,a)=> a.indexOf(s,i+1) == -1 ).map((s)=> JSON.parse(s));

console.log( objects );
&#13;
&#13;
&#13;

解释

  • 使用JSON.stringify
  • 将所有项目转换为其字符串版本
  • 删除重复项
  • 将它们解析回Objects

注意 如果你的对象&#39;这个答案不会起作用。密钥的顺序不同,对象中的所有function值都会在stringifyparse之后删除。