我正在寻找一种替换对象键值的方法,如果它们存在于另一个对象中,例如:
let objA = {
x:"1",
y:"2",
z:"3"
};
let objB = {
a:"4",
z:"newValue",
c:"6"
};
如果objB
中存在相同的键,我想从objA
获取值,
结果应该是这样的:
rsultObj = {
x:"1",
y:"2",
z:"newValue"
}
答案 0 :(得分:2)
您可以用objA
迭代Array.forEach()
的键,并替换在objB
中找到的每个键的值:
const objA = { x: "1", y: "2", z: "3" };
const objB = { a: "4", z: "newValue", c: "6" };
Object.keys(objA).forEach(key => {
if (key in objB) {
objA[key] = objB[key];
}
});
console.log(objA);
答案 1 :(得分:2)
此自定义func checkUserStatus() {
let currentUserID = Auth.auth().currentUser?.uid
//get the role of the current user to see if they have admin priveleges
let userRef = Database.database().reference().child("users").child(currentUserID!)
userRef.observe(.value, with: { (snapshot) in
let dictionary = snapshot.value as! [String: Any]
let role = dictionary["role"] as! String
self.retrievedRole = role
}, withCancel: nil)
print("retrieved role is \(retrievedRole)")
//only those users who are admin or creators can see upload button
if (retrievedRole == "admin") || (retrievedRole == "creator") {
uploadButton.isHidden = false
} else {
uploadButton.isHidden = true
}
}
函数将使用var retrievedRole = ""
的所有键创建一个新对象,并且如果remix
拥有键,则使用base
的值创建一个新对象,否则将使用extra
的值创建一个新对象
extra
您可以使用这样的功能。
base
它返回一个这样的新对象。
function remix(base, extra) {
const result = {};
const has = {}.hasOwnProperty;
for (let k in base) {
if (has.call(extra, k)) {
result[k] = extra[k];
} else if (has.call(base, k)) {
result[k] = base[k];
}
}
return result;
}
答案 2 :(得分:1)
您可以在单行中写:
Object.keys(objA).filter(key => key in objB).forEach(key => objA[key] = objB[key]);