如何过滤JSON对象(JavaScript)
我试图过滤下面的JSON对象,并返回一个对象数组,其中'markdown'键中的值包含say“steve”-为此,我怀疑我需要将对象转换为数组,然后进行过滤 我已尝试使用如何过滤JSON对象(JavaScript),javascript,json,filter,Javascript,Json,Filter,我试图过滤下面的JSON对象,并返回一个对象数组,其中'markdown'键中的值包含say“steve”-为此,我怀疑我需要将对象转换为数组,然后进行过滤 我已尝试使用Object.entries Object.entries(diagnosisData).filter(item=>item==='steve') 还有JSON.parse,但我想我找错了方向 我想说: 结果=[ { “id”:“stevey”, “降价”:“史蒂维”, “源”:空 }, { “id”:“steven”, “降
Object.entries
Object.entries(diagnosisData).filter(item=>item==='steve')
还有JSON.parse
,但我想我找错了方向
我想说:
结果=[
{
“id”:“stevey”,
“降价”:“史蒂维”,
“源”:空
},
{
“id”:“steven”,
“降价”:“史蒂文”,
“源”:空
}
]
谁能给我指点一下吗
非常感谢
JSONdata={
“史蒂文”:{
“id”:“steven”,
“降价”:“史蒂文”,
“源”:空
},
“约翰”:{
“id”:“johnA”,
“降价”:“JOHNA”,
“源”:空
},
“亨利”:{
“id”:“henryP”,
“降价”:“亨利普”,
“源”:空
},
“stevel”:{
“id”:“steveL”,
“降价”:“史蒂文”,
“源”:空
}
}
一种方法是:Object.values(JSONdata).filter(o=>o.id=='steve')
或者,如果您没有is并希望通过密钥执行此操作:
const key = Object.keys(JSONdata).filter(o => o === 'steve');
console.log(JSONdata[key]);
尝试使用:
然后从键值对列表中创建对象:
Object.fromEntries(result)
例如:
让JSONdata={
“史蒂夫”:{
“id”:“史蒂夫”,
“降价”:“史蒂夫”,
“源”:空
},
“约翰”:{
“身份证”:“约翰”,
“降价”:“约翰”,
“源”:空
},
“亨利”:{
“身份证”:“亨利”,
“降价”:“亨利”,
“源”:空
},
};
让filterKey='steve';
const result=Object.entries(JSONdata.filter)([k,v])=>k==filterKey);
console.log(Object.fromEntries(result))
您的Object.entries(…).filter方法就快到了。但是,我不确定您要根据什么进行过滤-键、id
值还是标记值
为了避免混淆,假设您有这样一个对象:
const数据={
凯亚:{
id:'艾达',
markdown:“markdownA”
},
键B:{
id:'idB',
markdown:“markdownB”
}
}
然后,仅供参考,Object.XX
函数产生以下结果:
console.log(Object.key(数据))
//['keyA','keyB']
console.log(对象.值(数据))
// [
//{id:'idA',markdown:'markdownA'},
//{id:'idB',markdown:'markdownB'}
// ]
console.log(Object.entries(数据))
// [
//['keyA',{id:'idA',markdown:'markdownA'}],
//['keyB',{id:'idB',markdown:'markdownB'}]
// ]
因此:
要按键过滤,只要是您想要的完美匹配项,就不需要任何过滤器:
const result=data.keyA
console.log(result)/{id:'idA',markdown:'markdownA'}
如果需要不精确的匹配,例如所有以a
结尾的键,您可以使用Object.entries(…).filter
(然后将映射到值):
const result=Object.entries(数据)
.filter(([key,value])=>key.endsWith('A'))
.map(([key,value])=>value)
console.log(result)/[{id:'idA',markdown:'markdownA'}]
要按其中一个属性(id
或markdown
)进行筛选,您可以使用Object.entries(…).filter
,但由于您当时甚至对键不感兴趣,因此可以使用Object.values(…).filter
:
const result=Object.values(data.filter)(item=>item.id==='keyA')
console.log(result)/[{id:'idA',markdown:'markdownA'}]
JSONData在哪里?我认为您的JSONData应该是一个对象数组,或者至少您的人员列表应该都在一个数组中。以内容命名属性没有意义…const key='steve'
将是。。。更简单。是的,当然,但根据需要,“steve”可能是一个变量。是的,“steve”只是一个变量。非常有用,谢谢你-我修改了问题以显示我要查找的结果-我正在查看键(看起来像Object.values)是一条路…好的,但是你是在id
还是标记中搜索?我还不清楚。根据什么标准?子串匹配?字符串的开头?结束?它是否区分大小写?只是猜测:要同时搜索id
和markdown
,不区分字符串大小写的开头,可以使用Object.values(JSONObject.filter(item=>item.id.toUpperCase().startsWith('STEVE')| item.markdown.toUpperCase().startsWith('STEVE'))
很抱歉澄清-我正在查看markdown-希望返回一个包含字符串的对象数组-例如'steve',那么您只需要Object.values(JSONObject.filter)(item=>item.markdown.includes('steve'))
Object.fromEntries(result)