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数组-高级分配[重复]的主要内容,如果未能解决你的问题,请参考以下文章

js如何去除数组中重复项

JS数组中级+高级技巧

JS高级---数组的函数调用

js怎么去除数组中的重复的数据

js 中如何去掉数组中的重复的数据

js高级程序设计——数组方法总结