9

同じまたは異なるグローバルオブジェクトの2つのプロパティの値を交換する単純な関数を作成しようとしています。

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"};

もう一つの例:

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"};

これが私がこれまでに思いついたものですが、それほど多くはありません。割り当てを行う方法にこだわる。

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

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

これを行うための適切な方法は何ですか?

4

3 に答える 3

10

ES6の破棄により、一時変数なしでスワップできるようになりました。これは、のように変数値を交換するだけでなく[a, b] = [b, a]、次のようにオブジェクトのプロパティを含むより複雑な式に適用されます[obj.key1, obj.key2] = [obj.key2, obj.key1]。冗長性を回避するには、スワップ機能を使用する必要があります。

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

同じ考え方が2つのオブジェクトと2つのキーにも当てはまります。

function swap(obj1, key1, obj2, key2) {
   [obj1[key1], obj2[key2]] = [obj2[key2], obj1[key1]];
}
swap(obj1, 'key1', obj2, 'key2');
于 2017-08-11T14:17:07.470 に答える
6

私はそれを次のようにします:

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");
于 2012-09-01T05:04:07.297 に答える
0

簡単に言えば、

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

value1key2に、value2key1に割り当てます

[obj['key1'], obj['key2']] = [obj['key2'], obj['key1']];
于 2021-09-22T05:35:49.493 に答える