【问题标题】:remove duplicate object from array according 2 key根据 2 键从数组中删除重复对象
【发布时间】:2020-04-03 07:40:54
【问题描述】:

我有这样的对象数组,我想根据 2 个键删除重复的项目, 在我的数据中,我想删除具有相同 room_idmdate 的项目, 在下面的代码对象 4 和 5 具有相同的 room_id 和 mdate 所以我应该删除其中一个,有什么解决方案吗?

我有删除重复对象的功能,但它可以检查一个键

function getUnique(arr, comp) {

    arr.map()
    const unique = arr
        .map(e => e[comp])

        // store the keys of the unique objects
        .map((e, i, final) => final.indexOf(e) === i && i)

        // eliminate the dead keys & store unique objects
        .filter(e => arr[e])
        .map(e => arr[e]);

    return unique;
}



arr = [{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-15"
price: "100000"
room_id: 1
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 1
},
{
cond: 2
extra_fee: 20000
kind: ""                       object 3 <--------------   is same - have same mdate and room_id
mdate: "2019-12-10"
price: "100000"
room_id: 2
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 2                       object 4 <--------------   are same - have same mdate and room_id
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 7
}
]

【问题讨论】:

    标签: javascript ecmascript-6 ecmascript-5 ecmascript-2016


    【解决方案1】:

    这将删除重复项,

      let arr = [{
        cond: 2,
        extra_fee: 20000,
        kind: "",
        mdate: "2019-12-15",
        price: "100000",
        room_id: 1
      },
      {
        cond: 2,
        extra_fee: 20000,
        kind: "",
        mdate: "2019-12-10",
        price: "100000",
        room_id: 1
      },
      {
        cond: 2,
        extra_fee: 20000,
        kind: "",
        mdate: "2019-12-10",
        price: "100000",
        room_id: 2
      },
      {
        cond: 2,
        extra_fee: 20000,
        kind: "",
        mdate: "2019-12-10",
        price: "100000",
        room_id: 2
      },
      {
        cond: 2,
        extra_fee: 20000,
        kind: "",
        mdate: "2019-12-10",
        price: "100000",
        room_id: 7
      }
      ]
      
    const arrayWithoutDuplicates = arr.filter((v,i,a)=>a.findIndex(t=>(t.room_id=== v.room_id && t.mdate===v.mdate))===i)
    console.log(arrayWithoutDuplicates)

    【讨论】:

      【解决方案2】:

      试试这个:

      function getUnique(arr, comp) {
          let tmpObj = {};
          let unique = [];
          for (let i = 0; i < arr.length; i++) {
            if (tmpObj[arr[i][comp]] === undefined) {
              tmpObj[arr[i][comp]] = arr[i][comp];
              unique.push(arr[i]);
            }
          }
          return unique;
        }
      
        let arr = [{
          cond: 2,
          extra_fee: 20000,
          kind: "",
          mdate: "2019-12-15",
          price: "100000",
          room_id: 1
        },
        {
          cond: 2,
          extra_fee: 20000,
          kind: "",
          mdate: "2019-12-10",
          price: "100000",
          room_id: 1
        },
        {
          cond: 2,
          extra_fee: 20000,
          kind: "",
          mdate: "2019-12-10",
          price: "100000",
          room_id: 2
        },
        {
          cond: 2,
          extra_fee: 20000,
          kind: "",
          mdate: "2019-12-10",
          price: "100000",
          room_id: 2
        },
        {
          cond: 2,
          extra_fee: 20000,
          kind: "",
          mdate: "2019-12-10",
          price: "100000",
          room_id: 7
        }
        ]
        console.log(getUnique(arr, "room_id"));

      【讨论】:

      • 它会删除所有具有相同 room_id 的元素,如果 mdateroom_id 中的元素相同,我只想删除一个元素
      猜你喜欢
      • 2018-09-06
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2017-12-01
      • 2012-05-17
      • 2021-06-03
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多