JS数组-高级分配[重复]
Posted
技术标签:
【中文标题】JS数组-高级分配[重复]【英文标题】:JS arrays - advanced assignment [duplicate] 【发布时间】:2017-05-25 22:19:19 【问题描述】:这与 javascript 中的数组有关,我试图在复杂的逻辑中使用它。
考虑以下代码:
a['a1'] = 'AJA'
我们知道,这与a.a1 = 'AJA'
相同(只要给出了正确的定义)。
所以,如果我们继续解释这个:
console.log(a.a1[0])
console.log(a.a1[1])
console.log(a.a1[2])
console.log(a.a1)
它记录:
A
J
A
AJA
现在,我只需要在第 4 个位置分配一个新角色。
当我尝试a[a1][3] = 'Y'
或a.a1[3] = 'Y'
然后尝试console.log(a.a1)
时,它仍然显示AJA
而不是AJAY
。
我知道我们可以使用字符串连接来做到这一点,即
a['a1'] = a['a1'] + 'Y'
并完成此任务。
但为什么第一种方法不起作用?还有什么其他方法可以做到这一点?
【问题讨论】:
请不要使用带有自定义属性的数组,顺便说一句,这不是数组问题,而是字符串问题。 如果你想实现这种行为,你需要将字符串声明为一个字符数组。var str = "AJA"; --> var strArr = ["A","J","A"];
,当您完成对字符数组的编辑后,您需要将其转换回字符串。
var str = "AJA"; var strArr = str.split(''); strArr[3] = "Y"; str = strArr.join('');
@LearnHowToBeTransparent 这可能适用于一个简单的数组。但不是在这里..
【参考方案1】:
据我所知 a[a1][3] 或 a.a1[3] 是一个字符串变量,你可以把它当作:
var s = 'ss';
当你评估 s[0] 时,你会得到一个字符串值。因此,当您将任何字符串值分配给 s 时,您将不会得到 'ss' + anyvalue 而是 anyvalue。 :)
【讨论】:
字符串本身没有赋值,只有属性(不是s = …
,而是s[2] = …
)。这与问题有何关系?
只是一个示例,当您尝试评估 a[a1][3] 或 a.a1[3] 时,您将得到与我上面提到的示例相同的类型。试试 typeof(a[a1][3])【参考方案2】:
字符串是不可变的。这意味着如果你创建了一个字符串,你就不能再修改它了。所以你的a1
对第四个字符一无所知。
你可以看到这个例子。我尝试更改已创建字符串的第二个字符,但不会再更改。
let a = ;
a['a1'] = 'AJA';
a.a1[1] = 'A';
console.log(a.a1);
更多内容可以查看MDN Documentation
【讨论】:
是的,它们是不可变的。但这是否意味着字符串连接是完成此任务的唯一方法? @A.J.有很多方法可以做到这一点。但是字符串连接很简单 "还有什么其他方法可以做到这一点?" 您可以创建一个函数来获取参数 char 和 index,但在后台您需要使用字符串连接 :) 您基本上是在确认 OP 已经发现了什么,但没有提供答案。以上是关于JS数组-高级分配[重复]的主要内容,如果未能解决你的问题,请参考以下文章