【发布时间】:2021-12-18 19:35:50
【问题描述】:
我在 ID 为 #map_coords 的 textarea 中有一个这样的字符串。
[id:1,x:288.43,y:260.15,url:#]-[id:2,x:396.43,y:310.15,url:#]-[id:3,x:503.43,y:299.15,url:#]-[id:4,x:642.43,y:191.15,url:#]
我将字符串分配给一个变量:var getVals = jQuery('#map_coords').val();
我正在将字符串转换为数组:getVals = getVals.split("-");
所以现在上面的字符串看起来像这样:
Array
0: [id:1,x:288.43,y:260.15,url:#]
1: [id:2,x:396.43,y:310.15,url:#]
2: [id:3,x:503.43,y:299.15,url:#]
3: [id:4,x:642.43,y:191.15,url:#]
然后,单击一个按钮,我想删除数组中的一个值,比如说第二个 (1:)。我这样做:
getVals.splice((getMap - 1),1);
getMap 变量始终与数组中的id: 值相同。因此,如果我需要删除 id:2 ,我将拼接 1 值(这就是我这样做的原因 getMap - 1 )。
删除后的数组是这样的:
Array
0: [id:1,x:288.43,y:260.15,url:#]
1: [id:3,x:503.43,y:299.15,url:#]
2: [id:4,x:642.43,y:191.15,url:#]
这很好,但问题是现在1: 键有一个错误的id:3。我想把它改成id:2。 id:4 也是如此,在id:2 之后数组中的每个键都需要更改为id:3 等等。而这个id:2 不是静态的,而是根据getMap 变量动态变化的。为此,我再次将密钥转换为另一个数组。像这样:
var arrLength = getVals.length;
for (var i = (getMap - 1); i < arrLength; i++) {
var newVals = getVals[i].split(",");
}
魔法发生在 for 争论中,我在其中设置了 var i = (getMap - 1)。这有助于我更改执行我更改的键的值。
现在我们可以拆分每个键,结果如下:
0: [id:3
1: x:503.43
2: y:299.15
3: url:#]
还有这个:
0: [id:4
1: x:642.43
2: y:191.15
3: url:#]
太棒了!现在我可以只更改[0] 键并从它们的值中减去1,将3 变为2,将4 变为3,依此类推,直到数组结束。我是这样做的:
var arrLength = getVals.length;
for (var i = (getMap - 1); i < arrLength; i++) {
var newVals = getVals[i].split(",");
for (var x = 0; x < 1; x++) {
newVals = newVals[0].replace((i+2),(i+1));
}
}
如果我这样做 console.log(newVals) 我会得到正确的更改值:
[id:2
[id:3
是的!它有效,但是......现在,我如何将这些新值放回原始的 getVals 数组?我需要得到的最终形式是这样的:
[id:1,x:288.43,y:260.15,url:#]-[id:2,x:503.43,y:299.15,url:#]-[id:3,x:642.43,y:191.15,url:#]
与您在本文开头看到的字符串相同,只是现在删除了 id:2 键,并且以下所有键的 id: 都被减 1。
最后我会做:getVals.toString().replace( /],/g,']-');,它可以帮助我在数组之间添加- 符号,并将整个内容再次转换为字符串,并将其作为值传递给它来自的文本区域!
所以我唯一的问题是如何在我的 getVals 数组中更新 newVals 的结果?
非常感谢您阅读所有这些内容!
【问题讨论】:
-
为什么不在文本区域开始使用 JSON?
-
url:#是什么?在 JS 中#应该是你自己的对象... -
告诉我们你在做什么很好。告诉我们您想要实现的目标会更好!
标签: javascript jquery arrays