2017-07-16 81 views
1

我想添加一個對象到數組,如果它不在數組中。看起來很簡單,但不工作。我的數組仍然空着。我在哪裏犯錯誤?添加對象到數組不工作

var members = []; 
var member = { id: 123, name: "Jane Doe" }; 


members.find((item) => { 
    if(members.length === 0 || item.id !== member.id) 
    members.push(member); 
}) 

回答

3

我不認爲這是使用find爲代碼中的正確方法; find期望的布爾值返回和

返回滿足所述提供的測試功能的陣列中的第一元素的值。否則返回undefined。

你可以只拉出來的條件,那麼你就可以測試和值壓入members

var members = []; 
 
var member = { id: 123, name: "Jane Doe" }; 
 

 
if(!members.some(item => item.id === member.id)) { 
 
    members.push(member); 
 
} 
 

 
console.log(members);

+0

是的,它與一個更正工作。條件應該是'item.id!== member.id',因爲我們要確保成員不在數組中。感謝您的幫助。 – Sam

+0

如果使用'item.id!== member.id',我會將否定運算符放到前面,它在邏輯上是相同的,那麼您可能需要使用'every'而不是'some'來保持邏輯等效。 – Psidom

+1

我現在明白了。乍一看我錯過了。再次感謝。 – Sam

0

要調用members.find(...)上成員是空的[]; 所以找到會立即退出,因爲它沒有任何元素。

嘗試初始化成員是這樣的:

變種成員= [{ID:111,名稱: 「喬BLO」}];

然後你會看到在會員

1

兩個要素,我不知道,如果使用.find()是最好的辦法在這裏。如果您傳遞給它的回調函數返回true,.find()會從數組中返回一個項目。

嘗試使用其他東西一樣.includes() -

var members = []; 
 
var member = { id: 123, name: "Jane Doe" }; 
 

 
console.log(members); 
 

 
if(!members.includes(item => member.id === item.id) || !members.length) { 
 
    members.push(member); 
 
} 
 

 
console.log(members);