我需要一种方法来自动删除对象的键以使其他键具有相同的键。
例:
var objA = {key1:1, key2:2, key3:3};
var objB = {key1:4, key2:5, key3:6, key4:7, key5:8}
在这种情况下,我希望我的objB
to只保留key1
,key2
和key3
,因为这些在这两个对象之间共享。
您可以使用此代码来实现您想要的效果。
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);
使用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)
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
的新对象。
您可以使用Object.keys
,Array.filter
和Array.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;
}, {}));
如果你不介意创建一个新对象来替换旧对象,你可以在.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);
尝试更现代的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' }));