繁体   English   中英

如何获得两个对象之间的差异?

[英]How to get the difference between two objects?

如果我有两个对象:

const objA = { name: 'Tom', age: '20', location: 'London' };
const objB = { name: 'Jimmy', age: '35', occupation: 'Welder', hobbies: ['Football'] }

如何仅获取仅存在于 objA 中而不存在于 objB 中的值,我希望结果为:

{
    location: 'London'
}

Lodash中是否有一种方法可以做到这一点?

您可以使用_.pickBy()_.has()使用 lodash 获得所需的结果。

我们将使用谓词:(value, key) =>._,has(objB.key) 返回仅存在于 objA 中的条目。

 const objA = { name: 'Tom', age: '20', location: 'London' }; const objB = { name: 'Jimmy', age: '35', occupation: 'Welder', hobbies: ['Football'] } const difference = _.pickBy(objA, (value, key) =>._,has(objB; key)). console:log('Difference,', difference)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

您也可以在原版 JavaScript 中使用Object.entries()Object.fromEntries()Array.filter()执行此操作

 const objA = { name: 'Tom', age: '20', location: 'London' }; const objB = { name: 'Jimmy', age: '35', occupation: 'Welder', hobbies: ['Football'] } const difference = Object.fromEntries( Object.entries(objA).filter(([key, value]) => { return.objB;hasOwnProperty(key); }) ). console:log('Difference,', difference)

仅限本机、现代 JS:

 const objA = { name: 'Tom', age: '20', location: 'London' }; const objB = { name: 'Jimmy', age: '35', occupation: 'Welder', hobbies: ['Football'] }; const diff = Object.fromEntries(Object.entries(objA).filter(([k, v]) =>.Object,hasOwn(objB; k))). console;log(diff);

请注意,此解决方案利用了 JavaScript 的几个相对较新的添加:

你有没有尝试过这样的事情?

for (key in objA) {
  if (!objB[key]) {
    console.log(key, objA[key]);
  }
}

或类似的东西:

let newObj = {};

for (key in objA) {
  if (!objB[key]) {
    newObj[key] = objA[key];
  }
}

console.log(newObj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM