2016-09-24 219 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使用的嚴格相等比較認爲它們不是不等於

原始數據類型喜歡字符串,數字或布爾值,情況並非如此。