首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较不同对象的选定键

如何比较不同对象的选定键
EN

Stack Overflow用户
提问于 2020-01-21 10:35:15
回答 2查看 785关注 0票数 0

我想比较两个对象的一些选定字段。

E.g

代码语言:javascript
复制
const a = {type: "media", value: "TV"}
const b = {type: "media", value: "TV", name: "John"}

我们能不能把这两个对象和一些特定的键进行比较,比如

代码语言:javascript
复制
const keys = [type, value]
compare(a, b, keys);

我只需要知道一些处理这个逻辑的最佳实践,并且希望避免简单的循环。我们有这方面的房客吗?或任何JavaScript ES6函数。

FYI:这只是一个简单的例子,我的实时场景非常复杂。

更新:这是我尝试过的。

值来自反应状态,我正在构建我的对象,例如

代码语言:javascript
复制
const myObject = {a: aVal, b: bVal, c: cVal .......}
const compareObject = compareObject.exclude(the keys which I dont need) // example

const result = isEqual(myObject, compareObject)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-21 18:43:51

使用_.pick()从第二个对象(b)获取属性,然后使用_.isMatch()对值进行部分深度比较(只有存在于a中的b值)。

注意: _.isEqual()也适用于嵌套结构--参见a& c之间的比较。

代码语言:javascript
复制
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
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2020-01-21 10:38:26

您可以检查两个对象的每个属性。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59839183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档