【问题标题】:Remove duplicate element in object and leave unique element删除对象中的重复元素并保留唯一元素
【发布时间】:2017-12-15 03:16:41
【问题描述】:

我有两个对象:

obj1

{
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}

obj2

{
  "uuid": "",
  "open_bal_qty": 0,
  "open_bal_value": 0,
  "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
}

如何删除重复项并获取 obj2 中不存在的元素,所以我的新 obj 将是:

新对象

{
  "qty_min": 0,
  "qty_med": 0,
  "qty_max": 0,
}

我可以使用 lodash pick,但我不想手动输入要过滤的键名。

const newObj = pick(obj1, [
  'qty_min',
  'qty_med',
  'qty_max',
]);

提前致谢。

【问题讨论】:

  • 你可以在两个对象的键上使用_.difference(array, [values]),然后在你的pick函数中使用它。

标签: javascript object lodash


【解决方案1】:

使用 lodash,您可以从 obj1_.keys() 的所有 _.keys() _.omit() obj2

const obj1 = {"uuid":"","open_bal_qty":0,"open_bal_value":0,"qty_min":0,"qty_med":0,"qty_max":0,"kedai_uuid":"198ceaef-4ced-4207-9ba0-62afbb42bb85"};

const obj2 = {"uuid":"","open_bal_qty":0,"open_bal_value":0,"kedai_uuid":"198ceaef-4ced-4207-9ba0-62afbb42bb85"};

const newObj = _.omit(obj1, _.keys(obj2));

console.log(newObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

【讨论】:

    【解决方案2】:

    使用for..in 迭代对象并使用Object.hasOwnProperty 检查第二个对象是否具有相同的键

    var obj1 = {
      "uuid": "",
      "open_bal_qty": 0,
      "open_bal_value": 0,
      "qty_min": 0,
      "qty_med": 0,
      "qty_max": 0,
      "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
    }
    var obj2 = {
      "uuid": "",
      "open_bal_qty": 0,
      "open_bal_value": 0,
      "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
    }
    var newObj = {};
    for (var keys in obj1) {
      if (!obj2.hasOwnProperty(keys)) {
        newObj[keys] = obj1[keys]
      }
    }
    
    console.log(newObj)

    【讨论】:

    • 小心...如果 obj2 具有独特的属性则不起作用
    【解决方案3】:

    您可以将_.pick_.difference 结合使用,方法是找出两个对象的键之间的差异并选择这些键:

    const obj1 = {
      "uuid": "",
      "open_bal_qty": 0,
      "open_bal_value": 0,
      "qty_min": 0,
      "qty_med": 0,
      "qty_max": 0,
      "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
    };
    
    const obj2 = {
      "uuid": "",
      "open_bal_qty": 0,
      "open_bal_value": 0,
      "kedai_uuid": "198ceaef-4ced-4207-9ba0-62afbb42bb85"
    };
    
    const obj1Keys = _.keys(obj1); //or Object.keys
    const obj2Keys = _.keys(obj2);
    console.log(_.pick(obj1Keys > obj2Keys ? obj1 : obj2, _.difference(obj1Keys, obj2Keys)))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多