正如标题所述,我正在尝试使用给定的键返回一个新对象,并将其值翻转,并使所有其他键/值对保持不变。
这是我到目前为止所拥有的:
function swapKeyAndValue(obj, key) {
const result = [];
for (const property in obj) {result.push(obj); }
return result;
}
var instructor = { name: 'Elie', job: 'Instructor' };
console.log(
swapKeyAndValue(instructor, 'name'),
swapKeyAndValue(instructor, 'job')
);
问题是我仍在学习javascript的来龙去脉,而且我不确定如何使该对象停止以数组形式返回,并且还满足标题中的要求。
以下是我要返回的示例:
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
// {Elie: 'name', job: "Instructor"}
swapKeyAndValue(instructor, 'job');
// {name: "Elie", Instructor: 'job'}
答案 0 :(得分:1)
这一个有效!
function swapKeyAndValue (obj, key) {
const newObj = {};
for (let keys in obj) {
if (keys === key) {
newObj [obj[keys]] = key;
}
if (keys !== key) {
newObj[keys] = obj[keys];
}
}
return newObj;
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name');
答案 1 :(得分:0)
您创建了一个创建新数组的函数,
但是据我了解,您想更改特定的对象结构
因此,此代码是实现此目的的方法:
function swapKeyAndValue(obj, key) {
value = obj[key]
if (value){
obj[value]=key
delete obj[key]
}
}
var instructor = { name: 'Elie', job: 'Instructor' };
swapKeyAndValue(instructor, 'name')
console.log(instructor);
swapKeyAndValue(instructor, 'Elie')
console.log(instructor);
swapKeyAndValue(instructor, 'name')
console.log(instructor);
我希望这会有所帮助! :)
答案 2 :(得分:0)
这里不需要循环。取而代之的是,使用括号表示法获取当前键的值,然后设置新键(即值),并将新值设置为通过的键。然后,您需要像这样删除从对象传递过来的旧密钥:
function swapKeyAndValue({...obj}, key) { // {...obj} will copy the object (so it doesn't change the object passed through directly)
if (obj.hasOwnProperty(key)) { // check if key is in the object
const new_key = obj[key]; // grab value
obj[new_key] = key;
delete obj[key];
}
return obj;
}
const instructor = {
name: 'Elie',
job: 'Instructor'
};
console.log(
swapKeyAndValue(instructor, 'name'),
swapKeyAndValue(instructor, 'job')
);
这是另一种效率较低的方法,但是允许您使用Object.fromEntries()
,Object.entries()
和.map()
来保持键值顺序:
const swapKeyAndValue = (obj, key) =>
Object.fromEntries(Object.entries(obj).map(([k, v]) => k===key ? [v, k] : [k, v]));
const instructor = {
name: 'Elie',
job: 'Instructor'
};
console.log(
swapKeyAndValue(instructor, 'name'),
swapKeyAndValue(instructor, 'job')
);
答案 3 :(得分:0)
实际上,使用reduce
可以轻松实现所需的内容
function swapKeyAndValue(obj, key) {
const reducer = (accum, ck) => { // ck is the current key
if (ck === key) { // if ck is the key that we want to swap, we enter.
const val = obj[ck]; // take the value to a var
accum[val] = key; // then we swap it
} else {
accum[ck] = obj[ck]; // we dont swap anything...
}
return accum; // we return our partially build obj
}
return Object.keys(obj).reduce(reducer, {});
}
var instructor = {
name: 'Elie',
job: 'Instructor'
};
console.log(
swapKeyAndValue2(instructor, 'name'),
swapKeyAndValue(instructor, 'job')
);
代码中的问题是您正在构建Array
,然后期望它不是一个。
function swapKeyAndValue(obj, key) {
const result = []; // <---- you define an array, therefore if you return this, it will be an array
for (const property in obj) {result.push(obj); }
return result;
}
要使您的功能正常工作,您可以采用与我上面提到的reduce
类似的方法
function swapKeyAndValue2(obj, key) {
const result = {};
for (const property in obj) {
if (property === key) {
// we swap
const val = obj[property];
result[val] = property;
} else {
// we dont swap
result[property] = obj[property];
}
}
return result;
}
答案 4 :(得分:0)
这是使用For循环和2个If语句解决此问题的另一种简单方法!
function swapKeyAndValue(obj, swappedKey){
var result = {};
for(var key in obj){
if(key === swappedKey){
result[obj[key]] = swappedKey;
}
if(key !== swappedKey){
result[key] = obj[key];
}
}
return result;
}