gpt4 book ai didi

javascript返回对数组项的引用

转载 作者:可可西里 更新时间:2023-11-01 01:45:13 24 4
gpt4 key购买 nike

我有一个这样的数组:

users = [{id:1, name:'name1'},{id:2, name:'name2'}]

我如何获得对项目 {id:2, name:'name2'} 的引用,以便我可以更改它的名称属性,例如:

user = get_item(users, 'id', 2);
user.name = "user2 name changed";

console.log(users) 将有结果:

[{id:1, name:'name1'},{id:2, name:'user2 name changed'}]

我尝试使用 Array.filter() 函数,但它返回一个新数组而不是对原始数组的引用。我不能用它来改变原始数组。

有什么想法吗?

最佳答案

I tried to use Array.filter() function, but it returns a new array instead of a reference to the original array. which I can not use to mutate the original array.

它返回一个新数组,但数组的条目 仍然是对相同对象的引用。所以 filter 正好适合这个。

var filteredUsers = users.filter(function(entry) { return entry.id === 2; });
var item = filteredUsers[0];
item.name = "user2 name updated";
console.log(users[1].name) // "user2 name updated"

该数组包含对对象的引用,而不是它们的副本。当我们执行 item = users[1] 或使用 filter 获取包含对象子集的新数组时,我们会获得对象引用的副本,因此变量现在指的是同一个对象,如下所示:

                +−−−−−−−−−−+users−−−−−−−−−−>| (array)  |                          +−−−−−−−−−−+           +−−−−−−−−−−−−−−−+                |   0      |−−−−−−−−−−>|    (object)   |                |          |           +−−−−−−−−−−−−−−−+                |          |           | id:   1       |                |          |           | name: "name1" |                |          |           +−−−−−−−−−−−−−−−+                |   1      |−−+                |          |  |                |          |  |        +−−−−−−−−−−−−−−−+                |          |  +−−−+−+−>|    (object)   |                +−−−−−−−−−−+     / /   +−−−−−−−−−−−−−−−+                                 | |   | id:   2       |                +−−−−−−−−−−+     | |   | name: "name2" |filteredUsers−−>| (array)  |     | |   +−−−−−−−−−−−−−−−+                +−−−−−−−−−−+     | |                   |   0      |−−−−−+ |                +−−−−−−−−−−+       |                                      |item−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

Changing the object changes the object, and those changes are visible regardless of which reference to the object you use to look at its properties.

Now if you had an array of primitives:

var a = [1, 2, 3, 4, 5];

...当然,您不能使用上述方法,因为它们不是对象。在这种情况下,您将使用 indexOf 来查找索引:

var index = a.indexOf(3); // Find the first entry === 3

...然后修改条目

a[index] = 42;

这也适用于字符串(前提是它们是很好的普通字符串基元,而不是您通过 new String() 创建的东西,实际上没有理由这样做)。

关于javascript返回对数组项的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304383/

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