Javascript-在对象数组的属性中搜索字符串

时间:2017-12-05 12:43:00

标签: javascript json ecmascript-6 ecmascript-7

我有一组JSON对象。给定一个搜索字符串,我想只为那些将该字符串作为其属性之一的子字符串的对象过滤数组。我该如何有效地做到这一点?

6 个答案:

答案 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)

之前可能已经回答过:

JS search in object values

这可以解决您的问题。