javascript - 在 javascript 中为几个属性交换对象值
问题描述
当前对象
const obj = {
k1: v1,
k2: v2,
x1: v3,
x2: v4,
y: {
z1: v5,
z2: v6
}
}
预期对象
const obj = {
k1: v2,
k2: v1,
x1: v4,
x2: v3,
y: {
z1: v6,
z2: v5
}
}
已经为每个键尝试了单独的交换方法,还尝试了下面的对象分配方式
const obj = {
k1: 'v1',
k2: 'v2',
x1: 'v3',
x2: 'v4',
y: {
z1: 'v5',
z2: 'v6'
}
}
Object.assign(obj, {
k1: obj.k2,
k2: obj.k1,
x1: obj.x2,
x2: obj.x1,
y: {
z1: obj.y.z2,
z2: obj.y.z1,
}
});
Object.keys(obj).forEach(
(k) =>
obj[k] === null ||
(obj[k] === undefined && delete obj[k])
);
console.log(obj)
在某些情况下,一旦执行了对象分配,未定义将出现在 x1 或 x2 键上,因为 v3 或 v4 不是强制性的。所以在转换后试图从对象中删除未定义的键
期待一个优化和更好的解决方案
解决方案
obj
您的解决方案是从诸如添加未定义的键,obj.k4
并且obj.k3
它们也分配给了错误的键k3
和k4
.
您更正的解决方案
const obj = {
k1: 'v1',
k2: 'v2',
x1: 'v3',
x2: 'v4',
y: {
z1: 'v5',
z2: 'v6'
}
};
Object.assign(obj, {
k1: obj.k2,
k2: obj.k1,
x1: obj.x2,
x2: obj.x1,
y: {
z1: obj.y.z2,
z2: obj.y.z1,
}
});
console.log(obj);
您也可以使用扩展运算符来实现相同的目的。
let obj = {
k1: 'v1',
k2: 'v2',
x1: 'v3',
x2: 'v4',
y: {
z1: 'v5',
z2: 'v6'
}
};
obj = {...obj, ...{
k1: obj.k2,
k2: obj.k1,
x1: obj.x2,
x2: obj.x1,
y: {
z1: obj.y.z2,
z2: obj.y.z1,
}
}}
console.log(obj);
推荐阅读
- arrays - tflite 对象检测推理无法正常工作
- gmail-addons - G Suite 中有哪些不同的插件类型?
- java - Scala 在使用 Lift Web 提取 json 值时抛出错误
- python - 我需要从 python 中 Colebrook 方程的近似值中输入摩擦系数
- linux - 仅在某些子目录中查找
- c# - ASP.NET Core 3.1 OData PageResult 序列化
- android - 你能告诉我如何添加这个活动吗?
- java - Java 程序无法编译:缺少返回语句
- javascript - 在带有 PKCE 的 OAuth 授权流中使用时,如何在 Azure 应用注册中启用 CORS?
- excel - 如果范围内的单元格不等于空白,则将字符串应用于另一个范围内的单元格