JS搜索对象值

我有很多类似的对象,像这样;

[

{

"foo" : "bar",

"bar" : "sit"

},

{

"foo" : "lorem",

"bar" : "ipsum"

},

{

"foo" : "dolor",

"bar" : "amet"

}

]

我想用关键字搜索这些对象的值(而不是键),并返回在任何值中都包含关键字的对象数组。

因此,例如,使用关键字r,我将获得所有对象(对象#1中的“ baR”,对象#2中的“ loRem”和对象#3中的“

doloR”)。使用关键字lo,我将得到对象2和3(“ LOrem”和“ doLOr”),使用关键字,我将得到对象a1和3(“ bAr”和“

Amet”)。foo但是,使用关键字,我会得到一个空数组,因为“ foo”是键,并且在任何值中都没有找到(与“ bar”不同)……您明白了。

我将如何去做呢?在此先多谢!

回答:

像这样:

var objects = [

{

"foo" : "bar",

"bar" : "sit"

},

{

"foo" : "lorem",

"bar" : "ipsum"

},

{

"foo" : "dolor",

"bar" : "amet"

}

];

var results = [];

var toSearch = "lo";

for(var i=0; i<objects.length; i++) {

for(key in objects[i]) {

if(objects[i][key].indexOf(toSearch)!=-1) {

results.push(objects[i]);

}

}

}

结果数组将包含所有匹配的对象。

如果搜索“ lo”,结果将类似于:

[{ foo="lorem", bar="ipsum"}, { foo="dolor", bar="amet"}]

function trimString(s) {

var l=0, r=s.length -1;

while(l < s.length && s[l] == ' ') l++;

while(r > l && s[r] == ' ') r-=1;

return s.substring(l, r+1);

}

function compareObjects(o1, o2) {

var k = '';

for(k in o1) if(o1[k] != o2[k]) return false;

for(k in o2) if(o1[k] != o2[k]) return false;

return true;

}

function itemExists(haystack, needle) {

for(var i=0; i<haystack.length; i++) if(compareObjects(haystack[i], needle)) return true;

return false;

}

var objects = [

{

"foo" : "bar",

"bar" : "sit"

},

{

"foo" : "lorem",

"bar" : "ipsum"

},

{

"foo" : "dolor blor",

"bar" : "amet blo"

}

];

function searchFor(toSearch) {

var results = [];

toSearch = trimString(toSearch); // trim it

for(var i=0; i<objects.length; i++) {

for(var key in objects[i]) {

if(objects[i][key].indexOf(toSearch)!=-1) {

if(!itemExists(results, objects[i])) results.push(objects[i]);

}

}

}

return results;

}

console.log(searchFor('lo '));

以上是 JS搜索对象值 的全部内容, 来源链接: utcz.com/qa/424846.html

回到顶部