ES6合并对象

Object.assign(target, ...sources) 是将后者sources的全部合并到target , 有没有方法是只合并具有 target的key, target没有的key就不进行合并覆盖

阅读 4.2k
2 个回答

供参考。跟 Object.assign 行为保持一致,除了函数 length 不一样,这个没东西向后兼容所以不需要一致;以及没有拷贝 Symbol

function update (target, ...sources) {
  if (target == null) { // TypeError if undefined or null
    throw new TypeError('Cannot convert undefined or null to object')
  }

  const to = Object(target)

  for (let key in to) {
    // Avoid bugs when hasOwnProperty is shadowed
    if (Object.prototype.hasOwnProperty.call(to, key)) {
      for (let i = sources.length - 1; i >= 0; i--) {
        // Skip over if undefined or null
        if (sources[i] != null && Object.prototype.hasOwnProperty.call(sources[i], key)) {
          to[key] = sources[i][key]
          break
        }
      }
    }
  }

  return to
}
function merge(target, src) {
    const result = {...target}
    Object.keys(target).forEach(key => {
        if (target.hasOwnProperty(key)) {
            result[key] = src[key]
        }
    })
    return result
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题