2017-10-18 1 views
2

객체 내에있는 데이터를 필터링하는 가장 좋은 방법은 무엇입니까?필터를 사용하는 자바 스크립트/객체 배열에 포함

data은 배열 값 이었지만 아래 코드를 사용할 수 있었지만 지금은 item.QID이 객체 배열에있는 데이터를 모두 filter에 저장해야합니다.

데이터를 Obj :

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

니펫 : 나는에 QID 모든 값을 처리해야하므로 내가 이해에서

// 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는 배열에서 작동 내 배열로서의 객체.

원하는 결과 : (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

이 문제는 조금 모호하지만 내 이해 (I 틀렸다면 정정 해줘) Object#hasOwnProperty()

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

OP가 속성 – guest271314

+1

@ guest271314에서 특정 값을 확인하고 있습니다. * "item.QID가있는 모든 데이터"*. 어쨌든 잘못된 말일 수 있습니다. 어쨌든 내 해석이었습니다. – charlietfl

+1

다음 행을 보았습니다. _ "원하는 결과 : (item.QID = ABC123'라고 가정)"_ 및 예상 결과 – guest271314

0

을 시도, 같은 QID이 목록 emp에서 모든 항목을 제거 할 것입니다 다른 목록의 항목으로 data? 그런 경우에는

, 시도 :

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

일부는 콜백 배열 요소의에 대한 사실의 경우에 true를 반환하는 배열 방법이다. 따라서이 경우 some(d => d.QID === item.QID)은 목록 data의 요소 중 ANY가 item과 동일한 QID를 갖는 경우 true가됩니다.

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>

관련 문제