当在数组键的开头使用带数字的字符串时(Indesign 2017,extendscript),它们不会被添加到数组中

时间:2018-01-31 16:09:11

标签: javascript adobe-indesign extendscript

观察:

    var groupedLinks = new Array;
    for(var i = 0; i < 5; i++) {
      linkName = "59notgonnawork" + i;
      groupedLinks[linkName] = new Array;
    }

我原本希望结果是数组的链接用5个新键填充,值为5个空数组。

extendscript中的实际结果是...... grouplinks ... empty。

如果我将此示例更改为:

    var groupedLinks = new Array;
    for(var i = 0; i < 5; i++) {
      linkName = "notgonnawork" + i;

      groupedLinks[linkName] = new Array;
    }

它会完美运作。唯一的变化是失踪&#34; 59&#34;在用于数组键的字符串的开头。

请注意,当我在chrome或firefox的控制台中运行它时,这非常有效。这看起来似乎是一种不确定和/或延伸的方式。

有什么想法为什么?我同时解决了这个问题,但我很感兴趣。

3 个答案:

答案 0 :(得分:4)

  

我原本希望结果是数组的链接用5个新键填充,值为5个空数组。

这正是它的作用,但是您查看数据的方式可能会隐藏它,因为您没有使用正确的数据结构。此外,在不使用[]的情况下,属性访问无法正常工作,因为标识符可能无法以数字开头,因此您需要:

groupedLinks["59notgonnawork0"]

你所做的并不适用于数组,它们期望连续数字索引(尽管它们在技术上也可以分配其他属性)。您应该使用的结构类型是普通对象。

var groupedLinks = {};
for(var i = 0; i < 5; i++) {
  const linkName = "59notgonnawork" + i;
  groupedLinks[linkName] = new Array; // Array? plain Object? Depends on its use.
}

答案 1 :(得分:0)

为什么不尝试在每次迭代时推送数组中的值。

 var groupedLinks = new Array;
for(var i = 0; i < 5; i++) {
  linkName = "59notgonnawork" + i;

  groupedLinks.push(linkName);
}

答案 2 :(得分:0)

ExtendScript Arrays非常适合每个indeces存储数据。如果您需要键/值对象,为什么不使用...对象?

&#13;
&#13;
var groupedLinks = {};
for(var i = 0; i < 5; i++) {
  linkName = "59notgonnawork" + i;

  groupedLinks[linkName] = "Whatever…";
}

alert( groupedLinks["59notgonnawork0" ] ); //"Whatever…"
&#13;
&#13;
&#13;