在ant中对String.join的Javascript调用返回一个String而不是一个Array

时间:2016-10-07 06:29:53

标签: javascript ant split ant-contrib

我正在尝试建立两个“;”的对称差异我的ant文件中的分隔列表。但它不起作用,我认为可能是因为String.split(“;”)的结果似乎是一个字符串,而不是一个数组。 (如println(a1)所示。结果是:[Ljava.lang.String; @ 6395e579)。

查看代码:

<scriptdef language="javascript" name="diffLists">
    <attribute name="list1" />
    <attribute name="list2" />
    <attribute name="target" />
    <![CDATA[
          function symmetricDifference(str1, str2) {
                var a1 = str1.split(";");
                println(Array.isArray(a1));
                println(a1);
                var a2 = str2.split(";");

              var result = [];
              for (var i = 0; i < a1.length; i++) {
                if (a2.indexOf(a1[i]) == -1) {
                  result.push(a1[i]);
                }
                }
                for (i = 0; i < a2.length; i++) {
                  if (a1.indexOf(a2[i]) == -1) {
                    result.push(a2[i]);
                  }
                }
                return result;
            }

          project.setProperty(attributes.get("target"),symmetricDifference(attributes.get("list1"),attributes.get("list2")).join(";"));
   ]]>
  </scriptdef>

<target name="init">
    <taskdef resource="net/sf/antcontrib/antlib.xml">
      <classpath>
        <pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar"/>
      </classpath>
    </taskdef>
</target>

<target name="checkDiff" depends="init">
 <var name="fileOld.list" value="a.txt;b.txt" />
 <var name="file.list" value="b.txt;c.txt" />
 <diffLists list1="${fileOld.list}" list2="${file.list}" target="diffList" />
 <echo message="DIFF: ${diffList}" />
</target>

应该返回:a.txt; c.txt 但它返回:a.txt; b.txt; b.txt; c.txt

如果重要的话,我正在使用2013年7月8日编译的Apache Ant(TM)1.9.2版。

感谢您的帮助!

0 个答案:

没有答案