배열이 JSON 객체입니다. 검색 문자열이 주어지면 해당 문자열을 속성 중 하나의 하위 문자열로 갖는 객체에 대해서만 배열을 필터링하려고합니다. 어떻게 효율적으로 수행 할 수 있습니까?자바 스크립트 - 객체 배열의 속성에서 문자열 검색
-1
A
답변
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))
1
은 검색 문자열 및 JSON 자체의 예와 함께 [mcve]를 제공합니다. – zer00ne