gpt4 book ai didi

javascript - 通过引用交换对象?

转载 作者:行者123 更新时间:2023-11-30 07:57:12 24 4
gpt4 key购买 nike

我希望使用 swap 函数交换两个对象,仅引用它们。

一个典型的用例是这样的:

function swap(a, b) {
...
}

var a = [ { id: 1 }, { id: 2 } ]
swap(a[0], a[0])
console.log(a) // [ { id: 2 }, { id: 1 } ]

var one = { id: 1 }
var two = { id: 2 }
swap(one, two)
console.log(one) // Should be { id: 2 }
console.log(two) // Should be { id: 1 }

(添加了更多用例。swap 不应依赖于任何数组功能。)

这可能吗?我知道 javascript 的函数是复制引用 source 。所以本质上,swap(a, b)ab 只是 a[0] 的副本> 和 a[1],所以如果不实际将 a 的字段复制到 b 的字段中,我似乎无法交换它们> 反之亦然,这似乎不切实际。


编辑:@timolawl 指出了 ES6 的解构,但它似乎不适用于这个用例:

let a = [{ id: 1 }, { id: 2 }]

let one = a[0]
let two = a[1]

console.log(a[0])
console.log(a[1])

[one, two] = [two, one]

console.log(a[0])
console.log(a[1])

jsfiddle

最佳答案

在 ES6 中,你可以使用 destructuring :

一般情况:

[a, b] = [b, a];

例子:

let one = { id: 1 };
let two = { id: 2 };

document.body.insertAdjacentHTML('beforeend', '<pre>' + JSON.stringify(one, 0, 4) + '</pre>');
document.body.insertAdjacentHTML('beforeend', '<pre>' + JSON.stringify(two, 0, 4) + '</pre>');

[one, two] = [two, one];

document.body.insertAdjacentHTML('beforeend', '<pre>' + JSON.stringify(one, 0, 4) + '</pre>');
document.body.insertAdjacentHTML('beforeend', '<pre>' + JSON.stringify(two, 0, 4) + '</pre>');

关于javascript - 通过引用交换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com