【问题标题】:JS arrays - advanced assignment [duplicate]JS数组-高级分配[重复]
【发布时间】: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 这可能适用于一个简单的数组。但不是在这里..

标签: javascript


【解决方案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 已经发现了什么,但没有提供答案。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多