【问题标题】:Can E4X Have An Array Passed To It?E4X 可以有一个数组传递给它吗?
【发布时间】:2009-09-29 11:20:45
【问题描述】:

假设我们有以下 XML:

<people>
 <person>
  <name>Jake</name>
  <skills>
   <skill>JavaScript</skill>
   <skill>HTML</skill>
   <skill>Flex</skill>
   <skill>CSS</skill>
  </skills>
 </person>
 <person>
   <name>John</name>
   <skills>
    <skill>C++</skill>
    <skill>Foxpro</skill>
   </skills>
 </person>
 <person>
  <name>Josh</name>
  <skills>
   <skill>JavaScript</skill>
   <skill>XML</skill>
   <skill>Flex</skill>
  </skills>
 </person> 
</people>

我想用 E4X 做的是找到与我通过它的技能列表/数组匹配的所有人员对象。所以,假设我想找到所有具有 HTML 或 JavaScript 技能的人。

我知道我能做到:

people.person.(descendants("skill").contains("HTML"))

people.person.(descendants("skill").contains("JavaScript"))

但我真的希望(/需要)一行完成(它是 Flex 中 XMLListCollection 过滤器函数的一部分)。

这样的东西会很理想

people.person.(descendants("skill").contains("HTML","JavaScript"))

尽管我尝试了该主题的变体,但一无所获。最棒的是:

people.person.(descendants("skill").in("HTML", "JavaScript"))

或类似的东西。

有人知道我在做什么是可能的吗?

我真的很想避免在其中添加我自己的循环。

杰克

【问题讨论】:

    标签: arrays match e4x


    【解决方案1】:

    没有通过编译器验证这一点,但这应该工作......

    people.person.(descendants("skill").contains("HTML") || descendants("skill").contains("JavaScript"))
    

    这是另一个镜头——

    如果你想检查 E4X 语句中的数组,我猜你不走运。虽然有一种可能的解决方法,但它涉及在 E4X 中使用自定义函数,并且只需将循环移到主代码块之外。有点多余,如果你真的想避免循环。

    var skillsArray:Array = ["HTML", "JavaScript"];
    var peopleWithSkills:XMLList = people.person.(matchSkills(descendants("skill"), skillsArray));
    
    function matchSkills(xmlList:XMLList, skillsArray:Array):Boolean
    {
        for each (var personSkill:XML in xmlList)
        {
            if (skillsArray.indexOf(personSkill.toString()) > -1)
            {
                return true;
            }
        }
    
        return false;
    }
    

    我最好的建议是真正深入了解您的内心,并决定您是需要避免循环,还是只想避免循环。 ;)

    【讨论】:

    • 你好,尼科。您是 E4X 专家吗?问题是我想传递一个实际的数组对象而不是两个已知值。杰克
    • 不是专家,但假设我喜欢解决这些问题。 ;)
    • 我猜你是对的。我只想避免循环而不是需要避免它们。再次感谢您的解决方案。如果我得到它来解决问题,我会玩一下代码并将其标记为答案。
    • 辛苦了 Niko!并且性能没有明显下降。你可以在这里看到它在使用codestore.net/apps/staffskills.nsf 值的数组来自左侧List中的选定项。选择多个技能将在网格中显示来自任何选定技能的文档。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多