用值交换键
Swapping key with value
我是 JavaScript 的新手,我正在尝试用它的值交换单个键。但是删除运算符似乎并没有真正删除该部分。我可能这样做效率低下,但请解释为什么删除有效但无效?以及如何将交换后的价值加回来。提前致谢。
function swapKeyAndValue(obj,key)
{
for(let x of Object.keys(obj))
{
if (x == key){
console.log(obj);
let tempkey = x; //where tempkey is the key: name
let tempval = obj[x]; //where tempval is value:ellie
delete obj.x;
console.log(obj.x); //outputs undefined
console.log(obj); //outputs the obj with the deleted value?
console.log(obj.x); //outputs undefined
obj.tempkey=tempval;
//console.log(obj);
}
}
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
您不需要使用 Object.keys 来交换一个键值。为此您可以使用括号表示法 [ ]。
function swapKeyAndValue(obj,key)
{
let value=obj[key]
obj[value]=key;
delete obj[key];
console.log(obj);
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
您可以这样组合 Object.entries
with reduce
:
const instructor = { name: 'Elie', job: 'Instructor' };
const reversed = Object.entries(instructor)
.reduce((acc, [key, value]) => ({
...acc,
[value]: key
}), {});
console.log(reversed);
或者普通的旧 JS:
var instructor = { name: 'Elie', job: 'Instructor' };
var reversed = {}
for(var key in instructor) {
reversed[instructor[key]] = key;
}
console.log(reversed);
不可变方法:
如果这不是隐含的要求,我会避免改变您的源对象。
相反,
- 您可以 destructure 将您的源对象转换为目标键和键的
...rest
- 然后简单地 return 源对象的浅拷贝与目标 key/value 交换:
const instructor = { name: 'Elie', job: 'Instructor' },
swapKeyAndValue = (obj,key) => {
const {[key]:k, ...rest} = obj
return {...rest, [obj[key]]: key}
}
console.log(swapKeyAndValue(instructor, 'name'))
.as-console-wrapper{min-height:100%;}
我是 JavaScript 的新手,我正在尝试用它的值交换单个键。但是删除运算符似乎并没有真正删除该部分。我可能这样做效率低下,但请解释为什么删除有效但无效?以及如何将交换后的价值加回来。提前致谢。
function swapKeyAndValue(obj,key)
{
for(let x of Object.keys(obj))
{
if (x == key){
console.log(obj);
let tempkey = x; //where tempkey is the key: name
let tempval = obj[x]; //where tempval is value:ellie
delete obj.x;
console.log(obj.x); //outputs undefined
console.log(obj); //outputs the obj with the deleted value?
console.log(obj.x); //outputs undefined
obj.tempkey=tempval;
//console.log(obj);
}
}
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
您不需要使用 Object.keys 来交换一个键值。为此您可以使用括号表示法 [ ]。
function swapKeyAndValue(obj,key)
{
let value=obj[key]
obj[value]=key;
delete obj[key];
console.log(obj);
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
您可以这样组合 Object.entries
with reduce
:
const instructor = { name: 'Elie', job: 'Instructor' };
const reversed = Object.entries(instructor)
.reduce((acc, [key, value]) => ({
...acc,
[value]: key
}), {});
console.log(reversed);
或者普通的旧 JS:
var instructor = { name: 'Elie', job: 'Instructor' };
var reversed = {}
for(var key in instructor) {
reversed[instructor[key]] = key;
}
console.log(reversed);
不可变方法:
如果这不是隐含的要求,我会避免改变您的源对象。
相反,
- 您可以 destructure 将您的源对象转换为目标键和键的
...rest
- 然后简单地 return 源对象的浅拷贝与目标 key/value 交换:
const instructor = { name: 'Elie', job: 'Instructor' },
swapKeyAndValue = (obj,key) => {
const {[key]:k, ...rest} = obj
return {...rest, [obj[key]]: key}
}
console.log(swapKeyAndValue(instructor, 'name'))
.as-console-wrapper{min-height:100%;}