2017-12-05 6 views
-1

배열이 JSON 객체입니다. 검색 문자열이 주어지면 해당 문자열을 속성 중 하나의 하위 문자열로 갖는 객체에 대해서만 배열을 필터링하려고합니다. 어떻게 효율적으로 수행 할 수 있습니까?자바 스크립트 - 객체 배열의 속성에서 문자열 검색

+4

은 검색 문자열 및 JSON 자체의 예와 함께 [mcve]를 제공합니다. – zer00ne

답변

4

당신이 , 당신은 다음과 같은 코드를 사용할 수있는 속성에 문자열 찾으려면 가정 : 당신이 재산 이름을 검색하려면

const arr = [ 
 
    {a:'abc', b:'efg', c:'hij'}, 
 
    {a:'abc', b:'efg', c:'hij'}, 
 
    {a:'123', b:'456', c:'789'}, 
 
]; 
 

 
const search = 'a'; 
 

 
const res = arr.filter(obj => Object.values(obj).some(val => val.includes(search))); 
 

 
console.log(res);

를 사용 Object.values 대신 Object.keys입니다.

Object.values은 ES2017의 기능입니다.

1

은 아마 당신은 이런 식으로 뭔가를하고 싶지 : 당신은 현재 객체의 키의 배열을 얻을 수있는 Object.keys 기능을 사용하여 다음 배열을 필터링 할 filter 방법을 사용할 수

var list = [ 
    {var1: "value1", var2: "value2", var3: "value3"}, 
    {var1: "value4", var2: "value5", var3: "value6"}, 
    {var1: "value4", var2: "value3", var3: "value2"}, 
    {var1: "value2", var2: "value8", var3: "value6"}, 
    {var1: "value1", var2: "value7", var3: "value7"}, 
    {var1: "value1", var2: "value6", var3: "value2"}, 
]; 

var searchString = "value2"; 

var newList = list.filter(element => { 
    for (var property in element) { 
     if (element.hasOwnProperty(property)) { 
      if(element[property] == searchString) { 
       return true; 
      } 
     } 
    } 
}); 

console.log(newList); 
1

. 이 문자열이있는 경우 그런 다음 각 키를 통해 루프를 확인할 수 있습니다 (그 방법없이 식별자에 .indexOf를 호출을 방지하기 위해 일부 경비를 추가했습니다.)

const search = 'xyz'; 
const data = yourDataFunction(); 
const filteredData = data.filter(item => { 
    let found = false; 
    Object.keys(item).forEach(key => { 
    if (item[key] && item[key].indexOf && item[key].indexOf(search) > -1) { 
     found = true; 
    } 
    }); 
    return found; 
}); 
1
var myStr = 'abc'; 
var myArr = [{abc:1,def:2}, {ghi:1,jkl:2}]; 
myArr.filter(obj => Object.keys(obj).some(key => key.indexOf(myStr) > -1))