根据其他对象删除对象的键

问题描述 投票:0回答:6

我需要一种方法来自动删除对象的键以使其他键具有相同的键。

例:

var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8}

在这种情况下,我希望我的objBto只保留key1key2key3,因为这些在这两个对象之间共享。

javascript
6个回答
1
投票

您可以使用此代码来实现您想要的效果。

var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8};
Object.keys(objB).forEach(function(key){
   if(!objA[key]){
     delete objB[key];
   }
});
console.log(objB);

1
投票

使用for..in循环对象,hasOwnProperty检查对象是否有属性和delete删除密钥

var objA = {
  key1: 1,
  key2: 2,
  key3: 3
};
var objB = {
  key1: 4,
  key2: 5,
  key3: 6,
  key4: 7,
  key5: 8
}

for (var keys in objB) {
  if (!objA.hasOwnProperty(keys)) {
    delete objB[keys]
  }
}
console.log(objB)

1
投票
var objA = { key1: 1, key2: 2, key3: 3 };
var objB = { key1: 4, key2: 5, key3: 6, key4: 7, key5: 8 };

objB = Object.keys(objB).reduce(function(result, key) {
  if (objA.hasOwnProperty(key)) {
    result[key] = objB[key]
  }

  return result;
}, {});

这是一个ES5版本,它不使用delete运算符,而是构造一个只有objA键并将其赋值给objB的新对象。


1
投票

您可以使用Object.keysArray.filterArray.reduce来实现此目的:

var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8}
console.log(Object.keys(objB)
    .filter(key => objA[key])
    .reduce((obj, key) => {
        obj[key] = objB[key];
        return obj;
    }, {}));

1
投票

如果你不介意创建一个新对象来替换旧对象,你可以在.reduce()的结果上使用Object.entries(),如下所示:

var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8};

objB = Object.entries(objB).reduce((res, [k,v]) =>
  k in objA ? Object.assign(res, {[k]:v}) : res
, {});

console.log(objB);

或者使用for-of循环来使用它,你可以这样做:

var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8};

var res = {};
for (const [k,v] of Object.entries(objB)) {
  if (k in objA) res[k] = v;
}

console.log(res);

0
投票

尝试更现代的JavaScript:

function reduceObject(baseObject = {}, dataObject = {}) {
  return Object.keys(baseObject)
    .reduce((result, key) => {
      result[key] = dataObject[key];
      return result;
    }, {});
}
const objA = {key1:1, key2:2, key3:3};
const objB = {key1:4, key2:5, key3:6, key4:7, key5:8};

console.log(reduceObject(objA, objB));
console.log(reduceObject(objA));
console.log(reduceObject(undefined, objB));
console.log(reduceObject({ a: 'key' }, { a: 'thing', on: 'theFly' }));
© www.soinside.com 2019 - 2024. All rights reserved.