Javascript-在对象数组的属性中搜索字符串
Javascript-searching for a string in the properties of an array of objects
我有一个 JSON 对象数组。给定一个搜索字符串,我想仅针对那些将该字符串作为其属性之一的子字符串的对象过滤数组。我如何有效地做到这一点?
也许您想做这样的事情:
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);
您可以使用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;
});
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 ) )
假设要在属性值中查找子串,可以使用如下代码:
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);
如果要搜索 属性 name,请使用 Object.keys
而不是 Object.values
。
请注意 Object.values
是 ES2017 的一个特性。
很有魅力:
data.filter((obj) =>
JSON.stringify(obj).toLowerCase().includes(query.toLowerCase())
)
我有一个 JSON 对象数组。给定一个搜索字符串,我想仅针对那些将该字符串作为其属性之一的子字符串的对象过滤数组。我如何有效地做到这一点?
也许您想做这样的事情:
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);
您可以使用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;
});
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 ) )
假设要在属性值中查找子串,可以使用如下代码:
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);
如果要搜索 属性 name,请使用 Object.keys
而不是 Object.values
。
请注意 Object.values
是 ES2017 的一个特性。
很有魅力:
data.filter((obj) =>
JSON.stringify(obj).toLowerCase().includes(query.toLowerCase())
)