2017-10-18 103 views
2

過濾掉對象內存在的數據的最佳方法是什麼?使用過濾器的Javascript /在對象數組上包含

我能夠使用下面的代碼,當data只是一個值的數組,但現在我需要filter了我的數組中的item.QID存在的任何數據。

數據的OBJ:

var data = [{ 
    QID: 'ABC123', 
    Name: 'Joe' 
}, 
{ 
QID: 'DEF456', 
Name: 'Bob 
}] 

段:

// I don't want to include data if this QID is in my object 
this.employees = emp.filter(item =>!this.data.includes(item.QID)); 

據我瞭解,includes只能陣列上,所以我需要把所有的QID值的我對象作爲數組。

期望的結果:(假設item.QID = ABC123

this.employees = emp.filter(item =>!this.data.includes('ABC123')); 

結果:

var data = [{ 
    QID: 'DEF456', 
    Name: 'Bob' 
}] 

UPDATE: 道歉,我留下了一些東西有點不清楚試圖只包括必要的東西。

// People Search 
    this.peopleSearchSub = this.typeahead 
     .distinctUntilChanged() 
     .debounceTime(200) 
     .switchMap(term => this._mapsService.loadEmployees(term)) 
     .subscribe(emp => { 
      // Exclude all of the current owners 
      this.employees = emp.filter((item) => item.QID !== this.data.QID); 
     }, (err) => { 
      this.employees = []; 
     }); 

上面的代碼是我正在使用的。 data是我想通過篩選出來的類型超前結果排除的用戶的對象。

+0

凡'emp'定義? – guest271314

+0

@ guest271314-我添加了一些我所忽略的內容 – SBB

回答

0

嘗試Object#hasOwnProperty()

this.employees = emp.filter(item =>item.hasOwnProperty('QID')); 
+0

OP正在檢查屬性 – guest271314

+1

@ guest271314中的特定值,而不是說明的內容.... *「item.QID存在的任何數據」*。可能是錯誤的措詞......無論如何我的解釋 – charlietfl

+1

授予,雖然看到下一行_「期望的結果:(假設'item.QID = ABC123')」_和預期結果 – guest271314

0

的問題是有點曖昧,但我的理解(糾正我,如果我錯了),就是你要刪除從列表emp具有相同QID所有項目作爲另一個列表中的任何項目data

如果是這樣的情況下,嘗試:

this.employees = emp.filter(item => !this.data.some(d => d.QID === item.QID)) 

一些是如果它的回調爲任何陣列元素的真,則返回true陣列方法。因此,在這種情況下,如果列表data的任何元素具有與item相同的QID,則some(d => d.QID === item.QID)將爲真。

0

可以使用的...在遍歷並篩選出你想要的東西:

const data = [{ 
    QID: 'ABC123', 
    Name: 'Joe' 
}, 
{ 
    QID: 'DEF456', 
    Name: 'Bob' 
}] 

let newData  = []; 
let filterValue = 'ABC123'; 

for (let value in data) { 
    if (data[value].QID !== filterValue) { 
    newData.push(data[value]); 
    } 
} 

newData將成爲您的新過濾陣列在這種情況下

0

您可以使用ES6。爲此過濾。我還添加了一些顯示過濾列表的元素和一個允許更改過濾值的輸入。該列表將在點擊按鈕時更新。

const data = [{ 
 
    QID: 'ABC123', 
 
    Name: 'Joe' 
 
}, 
 
{ 
 
    QID: 'DEF456', 
 
    Name: 'Bob' 
 
}] 
 

 
displayData(data); 
 

 
function displayData(arr) { 
 
    let str = ''; 
 
    document.getElementById('filterList').innerHTML = ''; 
 

 
    arr.forEach((i) => { str += "<li>" + i.QID + ": " + i.Name + "</li>"}) 
 
    document.getElementById('filterList').innerHTML = str; 
 
} 
 

 
function filterData() { 
 
let filterValue = document.getElementById('filterInput').value; 
 
filterText (filterValue); 
 
} 
 

 

 
function filterText (filterValue) { 
 
    let newArr = data.filter((n) => n.QID !== filterValue); 
 
    displayData(newArr) 
 
}
<input id="filterInput" type="text" value="ABC123" /> 
 
<button type ="button" onclick="filterData()">Filter</button> 
 
<hr/> 
 
<ul id="filterList"><ul>

相關問題