2016-09-24 130 views
0

我有一个对象数组,并使用indexOf来查找该数组中的特定对象。寻找一个对象数组中的对象返回null

我已经切换到在线数据存储,因为所选对象的数据现在作为变量返回,所以我必须创建一个“虚拟”对象,然后用它来查找数组中匹配的选定对象。

我比较了虚拟对象和数组中的对象,它们看起来相同,但总是返回null。

这是对象的数组:

data: 
[ 
    Creative { 
     id: '5631943370604544', 
     gid: '5631943370604544', 
     name: 'Hello', 
     description: '', 
     url: '', 
     videos: [] 
    }, 
    Creative { 
     id: '5653294995210240', 
     gid: '5653294995210240', 
     name: 'Yo', 
     description: '', 
     url: '', 
     videos: [] 
    }, 
    Creative { 
     id: '5745189578604544', 
     gid: '5745189578604544', 
     name: 'Sup', 
     description: '', 
     url: '', 
     videos: [] 
    } 
] 

这是虚拟对象:

object: 

Creative { 
    id: '5653294995210240', 
    gid: '5653294995210240', 
    name: 'Yo', 
    description: '', 
    url: '', 
    videos: [] 
} 

下面是用于查找函数。这是不可修改的,因为它是GraphQL和Relay的一部分,并且它是使用的函数。

function cursorForObjectInConnection(data, object) { 
    var offset = data.indexOf(object); 
    if (offset === -1) { 
    return null; 
    } 
    return offsetToCursor(offset); 
} 
+2

因为'{name:“bob”} === {name:“bob”} // false' – vlaz

回答

0

为什么你不做自己的查找功能(search by id)和通过ID搜索对象?? !!

1

indexOf()将searchElement与使用严格相等(与===或triple-equals运算符使用的方法相同)的数组元素进行比较。

来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

这是在Javascript知道一个非常重要的规则。您的虚拟对象(即使看起来相同)与该阵列中的对象不同。它们存在于计算机内存中的两个单独位置,因此indexOf使用的严格相等比较认为它们不是不等于

原始数据类型喜欢字符串,数字或布尔值,情况并非如此。