如果另一个对象中存在键值,该如何替换?

时间:2019-11-17 23:03:45

标签: javascript object

我正在寻找一种替换对象键值的方法,如果它们存在于另一个对象中,例如:

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"
}

3 个答案:

答案 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]);