gpt4 book ai didi

javascript - JS在对象值中搜索

转载 作者:IT老高 更新时间:2023-10-28 12:46:44 25 4
gpt4 key购买 nike

我有一个这样的同质对象数组;

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

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

例如,使用关键字 r,我将获取所有对象(对象 #1 中的“baR”、对象 #2 中的“loRem”和对象 #3 中的“doloR”) .使用关键字 lo,我会得到对象 2 和 3(“LOrem”和“doLOr”),使用 a,我会得到对象 1 和 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"}]

新版本 - 添加 trim 代码,确保结果集中没有重复的代码。

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 '));

关于javascript - JS在对象值中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com