10

I'm trying to make a simple function that will swap the values of two properties on the same or different global objects.

object1 = {"key 1":"value 1"};
object2 = {"key 2":"value 2"};

swapValuesInObject ("object1['key 1']","object2['key 2']",true)
// should result in:
// object1 === {"key 1":"value 2"};
// object2 === {"key 2":"value 1"};

Another example:

object1 = {"key 1":"value 1", "key 2":"value 2"};

swapValuesInObject ("object1['key 1']","object1['key 2']",1===1)
// should result in:
// object1 === {"key 1":"value 2", "key 2":"value 1"};

Here's what I've been able to come up with so far, but it's not much. Getting hung up on how to do the assignment.

function swapValuesInObject(property1, property2, condition) {
    if (condition) {
        // temp assignment
        var Obj1Value = property1;

        // do the switcheroo
        array1 = array2Value;
        array2 = array1Value;
    }
    return true;
};

What's the proper way to do this?

Dave Snigier
  • 2,574
  • 3
  • 21
  • 29

3 Answers3

14

With ES6 destructuring, you can now swap without a temp variable. This applies to not only swapping variable values as in [a, b] = [b, a] but more complex expressions involving properties of objects, like so: [obj.key1, obj.key2] = [obj.key2, obj.key1]. To avoid more redundancy, you need to use a swap function:

function swap(obj, key1, key2) {
   [obj[key1], obj[key2]] = [obj[key2], obj[key1]];
}
swap(obj, 'key1', 'key2');

The same idea applies with two objects and two keys:

function swap(obj1, key1, obj2, key2) {
   [obj1[key1], obj2[key2]] = [obj2[key2], obj1[key1]];
}
swap(obj1, 'key1', obj2, 'key2');
dlaliberte
  • 3,250
  • 2
  • 25
  • 22
6

I would do it as follows:

var obj1 = {
    "key1" : "value1",
    "key2" : "Value2"
};
var obj2 = {
    "key3" : "value3",
    "key4" : "Value4"
};

function swap(sourceObj, sourceKey, targetObj, targetKey) {
    var temp = sourceObj[sourceKey];
    sourceObj[sourceKey] = targetObj[targetKey];
    targetObj[targetKey] = temp;
}

swap(obj1, "key1", obj1, "key2");
swap(obj1, "key1", obj2, "key4");
just-boris
  • 9,468
  • 5
  • 48
  • 84
Vikdor
  • 23,934
  • 10
  • 61
  • 84
0

In simple words,

var obj = {
 "key1": "value1",
 "key2": "Value2" 
}

to assign value1 to key2 & value2 to key1

[obj['key1'], obj['key2']] = [obj['key2'], obj['key1']];
Vikram Sapate
  • 1,087
  • 1
  • 11
  • 16