我想比较两个对象的一些选定字段。
E.g
const a = {type: "media", value: "TV"}
const b = {type: "media", value: "TV", name: "John"}我们能不能把这两个对象和一些特定的键进行比较,比如
const keys = [type, value]
compare(a, b, keys);我只需要知道一些处理这个逻辑的最佳实践,并且希望避免简单的循环。我们有这方面的房客吗?或任何JavaScript ES6函数。
FYI:这只是一个简单的例子,我的实时场景非常复杂。
更新:这是我尝试过的。
值来自反应状态,我正在构建我的对象,例如
const myObject = {a: aVal, b: bVal, c: cVal .......}
const compareObject = compareObject.exclude(the keys which I dont need) // example
const result = isEqual(myObject, compareObject)谢谢
发布于 2020-01-21 18:43:51
使用_.pick()从第二个对象(b)获取属性,然后使用_.isMatch()对值进行部分深度比较(只有存在于a中的b值)。
注意: _.isEqual()也适用于嵌套结构--参见a& c之间的比较。
const compare = (a, b, keys) => _.isMatch( // check deep equality
a, // get properties from a
_.pick(b, keys), // get properties from b
)
const a = { type: "media", value: "TV", name: { first: "John" } };
const b = { type: "media", value: "TV", name: "John" };
const c = { type: "media", value: "TV", name: { first: "John" } };
console.log(compare(a, b, ['type', 'value'])); // true
console.log(compare(a, b, ['type', 'name'])); // false
console.log(compare(a, c, ['type', 'name'])); // true<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
发布于 2020-01-21 10:38:26
您可以检查两个对象的每个属性。
const
compare = (a, b, keys) => keys.every(k => a[k] === b[k]),
a = { type: "media", value: "TV" },
b = { type: "media", value: "TV", name: "John" };
console.log(compare(a, b, ['type', 'value'])); // true
console.log(compare(a, b, ['type', 'name'])); // false
https://stackoverflow.com/questions/59839183
复制相似问题