Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何过滤JSON对象(JavaScript)_Javascript_Json_Filter - Fatal编程技术网

如何过滤JSON对象(JavaScript)

如何过滤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”, “降

我试图过滤下面的JSON对象,并返回一个对象数组,其中'markdown'键中的值包含say“steve”-为此,我怀疑我需要将对象转换为数组,然后进行过滤

我已尝试使用
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)