gpt4 book ai didi

javascript - 修改数组 $(this) 的一个元素

转载 作者:行者123 更新时间:2023-11-30 17:19:59 27 4
gpt4 key购买 nike

我正在使用第 3 方 javascript 库,它需要将嵌套数组传递给函数。我多次使用这个函数,所以将数组存储在一个变量中并将它传递给函数。但是,数组的 1 个元素的字符串的一部分需要是我正在传递的事物的当前 id;我有一些看起来有点像的东西:

myArray = [["foo bar id","some data"],["foo2 bar2 id","some other data"]]

func1(($m1 = myArray.slice(0),
$.each($m1, function(i){
$m1[0] = myArray[i][0].replace("id","1");
})))

真的有必要复制数组吗?有没有一种方法可以通过 $(this) 对象来完成它,或者它不会起作用,因为它只在 .each 循环的范围内,并且不会传递回 func1 吗?

更新

下面的原始答案似乎不起作用 - 我第二次引用数组的值是第一次给出的值:

myArray = [["foo bar id","some data"],["foo2 bar2 id","some other data"]]
func1(

myArray = myArray.map(function(value)
{
value[0] = value[0].replace(/\bid\b/gi, '1');
console.log(value[0]); //returns "foo bar 1" as expected
return value;
});

)

func1(

myArray = myArray.map(function(value)
{
value[0] = value[0].replace(/\bid\b/gi, '2');
console.log(value[0]); //This returns "foo bar 1", not "foo bar 2"!
return value;
});

)

更新(完整正确的代码!)

总而言之,第 3 方库是 jsmol ,它允许显示分子图形。 jsmol 包括一些简单的 html 元素的便利功能,我使用的是 Jmol.jmolMenu() - 我实际得到的嵌套数组是

arr = [ ["select model=id; color blue", "colour this model blue"],
["select model=id; color green", "colour this model green"]
]

然后我在同一个 applet 中显示了 n 个分子模型,jsmol 将其引用为 1.1、2.1、3.1 等

我有 n Jmol.jmolMenu(它只是创建 html 选择列表);第一个改变1.1的颜色,第二个改变2.1的颜色等等-这是我需要将id的值更改为相关模型的地方,以及为什么替换只能替换当前实例当前副本的 - 否则它会使其他分子的列表不起作用!

在我的第一个菜单中,我实际上需要

Jmol.jmolMenu(jmol,
[
["select model=1.1; color blue", "colour this model blue"],
["select model=1.1; color green", "colour this model green"]
]
);

在我的第二个:

Jmol.jmolMenu(jmol,
[
["select model=2.1; color blue", "colour this model blue"],
["select model=2.1; color green", "colour this model green"]
]
);

我希望这有点道理,并解释了为什么我需要修改数组(这在以前可能看起来很奇怪!)

最佳答案

更新:
鉴于您正在处理嵌套数组,我最初的回答还不够,但仍然很容易解决:

var myArray = ["foo bar id","my first array"];
myArray = myArray.map(function(value)
{
return value.replace('id','1');//replaces only the first occurrence of "id", thouh
});

为什么要使用 jQuery 来改变标准的 JS 数组?为什么不使用普通的 vanillaJS?在这里写起来更快、更短、更容易:

var myArray = [["foo bar id","some data"],["foo2 bar2 id","some other data"]];
myArray = myArray.map(function(value)
{
value[0] = value[0].replace(/\bid\b/gi, '1');
return value;
});

像以前一样只是映射,但将 value 参数视为数组。如果您需要每个子数组的键,例如访问另一个数组中的相应 id:

var ids = ['1', '2'];
myArray = myArray.map(function(value, idx)//second argument is the key
{
value[0] = value[0].replace(/\bid\b/gi, ids[idx]);
return value;
});

仅此而已。

您可能会在当前代码中遇到“陷阱”。正如我在评论中提到的,您的 replace 调用只会替换字符串中第一次出现的 "id",而不是全部。它还将替换“id”,即使它是单词的一部分,并且替换调用区分大小写:

'ID placid id'.replace('id', '1');//ID plac1 id

这些问题可以通过使用正则表达式来解决:

'ID placid id'.replace(/\bid\b/gi, '1');//1 placid 1

模式中的 \b 代表一个单词边界g 标志使模式成为 global,所有出现的 id 都将被替换。 i 标志使模式不区分大小写。

关于javascript - 修改数组 $(this) 的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307166/

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