【问题标题】:Remove duplicated values in object array [duplicate]删除对象数组中的重复值 [重复]
【发布时间】:2021-08-26 05:24:39
【问题描述】:

如何在javascript中删除此对象数组中的重复值?

0: {d: “2021/01/19”, color: “#009988"}
1: {d: “2021/01/19”, color: “#CC3311"}
2: {d: “2021/01/19”, color: “#009988"}
3: {d: “2021/01/19”, color: “#009988"}
4: {d: “2021/01/20”, color: “#009988"}
5: {d: “2021/01/22”, color: “#009988"}

我想像这样过滤这个对象数组:

0: {d: “2021/01/19”, color: “#009988"}
1: {d: “2021/01/19”, color: “#CC3311"}
2: {d: “2021/01/20”, color: “#009988"}
3: {d: “2021/01/22”, color: “#009988"}

我已经这样做了,但结果不是我想要的。

    for (let i = 0; i < array.length-1; i++) {
      if (arr[i].d === array[i+1].d) {
        if (array[i].color === array[i+1].color) {
          array.splice(i, 1);
          i--;
        }
      }
    }

【问题讨论】:

  • 到目前为止你尝试过什么?什么是决胜局?

标签: javascript arrays sorting object filter


【解决方案1】:
arr.filter((el, index) => arr.findIndex(t => t.d === el.d && t.color === el.color) === index)

【讨论】:

    【解决方案2】:
    const initArray = [
      { d: "2021/01/19", color: "#009988"},
      { d: "2021/01/19", color: "#CC3311"},
      { d: "2021/01/19", color: "#009988"},
      { d: "2021/01/19", color: "#009988"},
      { d: "2021/01/20", color: "#009988"},
      { d: "2021/01/22", color: "#009988"}
    ];
    
    const result = [];
    
    initArray.forEach((itm) => {
      if (!(result.some(item => item.d === itm.d && item.color === itm.color))) {
        result.push(itm)
      }
    });
    

    【讨论】:

      【解决方案3】:

      const input=[{d:"2021/01/19",color:"#009988"},{d:"2021/01/19",color:"#CC3311"},{d:"2021/01/19",color:"#009988"},{d:"2021/01/19",color:"#009988"},{d:"2021/01/20",color:"#009988"},{d:"2021/01/22",color:"#009988"}];
      
      const res = input.filter((e,i,a) => 
        a.findIndex(x => x.d === e.d && x.color === e.color) === i
      )
      
      console.log(res)
      .as-console-wrapper { max-height: 100% !important; top: 0; } /* ignore this */

      【讨论】: