【问题标题】:clear all properties in object that dont exist in another object with lodash使用 lodash 清除对象中不存在于另一个对象中的所有属性
【发布时间】:2016-05-18 08:58:39
【问题描述】:

如何清除datacopy 中不存在于pk 中的所有属性

var datacopy={
  "RHID": "3",
  "NOME_REDZ": "4455",
  "EMAIL": "jose.infante@demo5555.pt",
  "EMAIL_PESSOAL": "jose.infante@demo5555.pt",
  "TELEMOVEL_1": "(351) 936 090 982",
  "DT_NASCIMENTO": "0000-00-00",
  "rhidwf": "3",
  "DT_RowId": "3"
}

var pk={
  "RHID": {
    "type": "numeric"
  },
  "SEQ"{
  "type": "numeric"
  }
}

我知道 lodash 的力量并且知道这是可能的。

【问题讨论】:

  • 在这种情况下,我想清除所有不是 RHID 或 SEQ jsfiddle.net/zwpu70no/1
  • 'native' js 解决方案怎么样?
  • “清除”是指删除或设置空字符串?
  • 删除没问题... robertklep 解决方案很完美

标签: javascript oop object lodash


【解决方案1】:

您可以使用 keys()pk 获取属性,然后使用 pick()datacopy 获取属性,以使用 pk 属性列表保留键值。

var result = _.pick(datacopy, _.keys(pk));

var datacopy = {
  "RHID": "3",
  "NOME_REDZ": "4455",
  "EMAIL": "jose.infante@demo5555.pt",
  "EMAIL_PESSOAL": "jose.infante@demo5555.pt",
  "TELEMOVEL_1": "(351) 936 090 982",
  "DT_NASCIMENTO": "0000-00-00",
  "rhidwf": "3",
  "DT_RowId": "3"
};

var pk = {
  "RHID": {
    "type": "numeric"
  },
  "SEQ": {
    "type": "numeric"
  }
};

var result = _.pick(datacopy, _.keys(pk));

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"&gt;&lt;/script&gt;

【讨论】:

  • 比我的更好的解决方案=D
【解决方案2】:
const _ = require('lodash');
...    
datacopy = _.omit(datacopy, _.difference(_.keys(datacopy), _.keys(pk)))

【讨论】:

【解决方案3】:

没有任何'lodash'的“纯”javascript单行解决方案(作为替代方案):

Object.keys(datacopy).forEach((k) => !pk[k] && delete datacopy[k]);

console.log(JSON.stringify(datacopy, 0, 4));

输出:

{
    "RHID": "3"
}

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2023-02-07
    • 2017-03-12
    • 2016-12-22
    • 2018-10-09
    • 1970-01-01
    • 2013-05-29
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多