【问题标题】:Check if an item exists in dataprovider检查数据提供者中是否存在项目
【发布时间】:2013-03-18 20:27:50
【问题描述】:

下午好。

在添加数据提供者之前,我需要检查该项目是否已经存在。但是当我尝试在我的数组中进行此检查时,indexOf 方法总是返回 -1。谁能帮助我?谢谢。

var contacts:Array = new Array();

for each(var i:Object in windowAddContact.selectedContacts)  {

  if(contacts.indexOf(i) == -1) {

    contacts.push(i);               
  }
}

contactList.dataProvider = contacts;                            

【问题讨论】:

    标签: apache-flex dataprovider


    【解决方案1】:

    给定代码;您已提供;我不希望 indexOf 返回 -1 以外的任何内容;除非你在 windowAddContact.selectedContacts 中有同一个对象的多个实例;这是可能的,但似乎不太可能。

    contacts 数组一开始是空的,这段代码所做的只是将集合中的项目复制到一个数组中。试试这个:

    var contacts:Array = new Array();
    contacts.add(windowAddContact.selectedContacts[0]);
    for each(var i:Object in windowAddContact.selectedContacts)  {
    
      if(contacts.indexOf(i) == -1) {
    
        contacts.push(i);               
      }
    }
    

    我敢打赌,你会看到 indexOf(i) 一次返回 -1 以外的值。不过,我不清楚你想做什么。为什么需要循环?你不能这样做吗:

    contactList.dataProvider = windowAddContact.selectedContacts; 
    

    【讨论】:

    • 感谢您的帮助。我不能这样做:contactList.dataProvider = windowAddContact.selectedContacts;因为我需要在添加之前检查我的 dataProvider 中是否已经存在联系人。 indexOf 方法不适用于数组联系人。我不知道为什么。我正在尝试创建一种方法来进行此验证:
    • var contacts:Array = new Array();对于每个(变量 i:windowAddContact.selectedContacts 中的对象){ if(contacts.indexOf(i) == -1) { contacts.push(i); } } contactList.dataProvider = 联系人;公共函数 toAdd(obj:Object):Boolean { for each(var i1:Object in contacts){ for(var i2:int = 0; i2
    • 对不起,如果我太菜鸟了。我是新开发的。我不知道为什么 ident 在此评论中不起作用。
    • 向 cmets 添加代码效果不佳。如果我的回答不包含您的解决方案;你不应该这样标记它。如果您有更多代码要分享,您应该编辑您的原始问题并将其添加为更新。基于您共享的代码;我仍然说您的“联系人”数组是空的,因此 indexOf() 将始终返回-1。请记住, indexOf 将比较对象实例化。如果您有两个具有相同数据的单独对象,Flex 将不会认为它们相同。
    • 再次感谢您的帮助并选择您的答案,因为它有助于创建解决我的问题的解决方案。我设法检查了要添加到我的 dataProvider 中的联系人。我可以保证我的联系人数组不为空。我很抱歉无法明确我的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2019-07-05
    • 2022-01-05
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多