我有一组JSON对象。给定一个搜索字符串,我想只为那些将该字符串作为其属性之一的子字符串的对象过滤数组。我该如何有效地做到这一点?
答案 0 :(得分:5)
就像一个魅力:
data.filter((obj) =>
JSON.stringify(obj).toLowerCase().includes(query.toLowerCase())
)
答案 1 :(得分:4)
假设您要在属性 value 中找到子字符串,可以使用以下代码:
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.keys
代替Object.values
。
请注意,Object.values
是ES2017的一项功能。
答案 2 :(得分:1)
也许你想做这样的事情:
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);
答案 3 :(得分:1)
您可以使用filter
方法过滤数组,然后使用Object.keys
函数获取当前对象上的键数组。然后,您可以遍历每个键并检查它是否具有子字符串(我添加了一些警卫以防止在没有该方法的情况下对标识符调用.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;
});
答案 4 :(得分: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 ) )
答案 5 :(得分:1)