javascript - 覆盖对象的所有键,但其 id
问题描述
我有一个和这个类似的对象,但它有更多的键。我想更新它的所有键,但 id。我可以手动完成。但我认为这不是最好的方法。
const o = {
name: "unknow",
key: "key"
value: "value"
id ": 12
}
如何更新/覆盖对象的所有键,但 id?
更新
这两个对象具有相同的键。但他们的钥匙有不同的价值。我需要更新第一个对象的所有键,不包括它的 id。
解决方案
我怀疑您正在寻找类似的东西:它设置了on但指定的assignBut
属性:ob
oa
const assignBut = (prop, oa, ob) => {
for (let key of Object.keys(ob))
// Check that I also verify that the property
// to set should be part of "oa" object. This
// prevents adding new properties: it just updates
// existing ones.
if (key !== prop && oa.hasOwnProperty(key))
oa[key] = ob[key]
}
const oa = {
name: "unknow",
key: "key",
value: "value",
id: 12
}
const ob = {
name: "xxx",
key: "yyy",
value: "zzz",
other: "aaa",
yetAnother: 289,
id: 15
}
assignBut('id', oa, ob)
console.log(oa)
省略给定属性的另一种方法
可以利用解构和计算属性名称来省略整个给定属性,因此for..of
只需要检查每个属性 fromob
是否存在oa
以设置它。
此外,可以保存检查以验证在执行和键的交集时ob
存在的属性:oa
oa
ob
const oa = {
name: "unknow",
key: "key",
value: "value",
id: 12
}
const ob = {
name: "xxx",
key: "yyy",
value: "zzz",
other: "aaa",
yetAnother: 289,
id: 15
}
const intersect = (xs, ys) => xs.filter(x => ys.includes(x))
const assignBut = (prop, oa, {
[prop]: omitted,
...ob
}) => {
const sharedKeys = intersect(Object.keys(oa), Object.keys(ob))
for (let key of sharedKeys)
oa[key] = ob[key]
}
assignBut('id', oa, ob)
console.log(oa)
推荐阅读
- mysql - Laravel Docker 容器未连接到本地 mysql
- ruby-on-rails - 如何通过 Rails 6 中的浏览器控制台访问自定义 JavaScript 函数
- java - Java 中电子邮件解析器的新手,阅读主题时遇到问题
- java - 使用 JDBC SQL 服务器连接查询时出错
- jenkins - Jenkins dsl配置块使重复选项卡
- plsql - 如何在pl-sql中获取csv文件的行数
- archer - 如何使用 RSA Archer 中的 Web API 获取交叉引用字段中记录的 ID?
- c++ - 我正在尝试创建一个函数“InOrder”,它在二分搜索中进行中序遍历
- validation - 验证器 textarea 不起作用并始终返回 false
- c# - 即使页面尚未加载并且出现“错误:500 服务器错误”,页面加载也不会引发错误