Javascript JS:JSON数据查询,比如SQL
我有以下JSON数据Javascript JS:JSON数据查询,比如SQL,javascript,json,Javascript,Json,我有以下JSON数据 { “卵石”{ “状态”:“活动” }, “石头”{ “状态”:“活动” }, “石头城”{ “状态”:“活动” }, “伦敦之石”{ “状态”:“活动” }, “东京石头城”{ “状态”:“活动” } } 在JS中,有没有一种方法可以获取所有与stone匹配的行并返回最后3行?只需使用一个简单的正则表达式,通过以下方式使用/stone\ugi来匹配stone键: var名称={ “卵石”:{ “状态”:“活动” }, “石头”:{ “状态”:“活动” }, “石头城”
{
“卵石”{
“状态”:“活动”
},
“石头”{
“状态”:“活动”
},
“石头城”{
“状态”:“活动”
},
“伦敦之石”{
“状态”:“活动”
},
“东京石头城”{
“状态”:“活动”
}
}
在JS中,有没有一种方法可以获取所有与stone匹配的行并返回最后3行?只需使用一个简单的正则表达式,通过以下方式使用
/stone\ugi
来匹配stone键:
var名称={
“卵石”:{
“状态”:“活动”
},
“石头”:{
“状态”:“活动”
},
“石头城”:{
“状态”:“活动”
},
“伦敦之石”:{
“状态”:“活动”
},
“东京之石”:{
“状态”:“活动”
}
}
var matchedNames={};
用于(名称中的名称){
如果(/stone_uu/gi.test(名称)){
matchedNames[名称]=名称[名称];
}
}
console.log(匹配的名称)代码>源代码={
“卵石”:{
“状态”:“活动”
},
“石头”:{
“状态”:“活动”
},
“石头城”{
“状态”:“活动”
},
“伦敦之石”:{
“状态”:“活动”
},
“东京之石”:{
“状态”:“活动”
}
};
行=[];
for(源中的var k)
如果(k.substr(0,6)=“石头”)
rows.push({[k]:source[k]});
这并不像@suchislife说的那么可怕。JSON数据固有的灵活性是SQL无法做到的。这就是为什么它变得如此普遍的原因
假设您的数据位于名为data
var data = {
"pebble": {
"status": "active"
},
"stone": {
"status": "active"
},
"stone_ny": {
"status": "active"
},
"stone_london": {
"status": "active"
},
"stone_tokyo": {
"status": "active"
}
}
const result = Object.keys(data)
.filter(key => key.match(/^stone_/) // This does the filtering (the WHERE clause)
.map(key => { return {[key]: data[key]}}) // This returns your selected rows
可以使用循环遍历所有可枚举字符串属性(包括继承的一次)。您可以将其与正则表达式匹配相结合,以检查密钥是否满足您的要求
const数据={
“卵石”:{“状态”:“活动”},
“石头”:{“状态”:“活动”},
“stone_ny”:{“status”:“active”},
“stone_london”:{“状态”:“活动”},
“stone_tokyo”:{“状态”:“活动”},
};
const result={};
for(常量输入数据){
如果(key.match(/^stone\/)结果[键]=数据[键];
}
控制台日志(结果)代码>不是SQL,但Lodash中存在类似关系演算(或者是关系代数?gah…)的东西。但您可以使用各种数组在两行中完成此操作。prototype
函数,如过滤器和映射-以及RegExp
。另请参见:这将返回匹配的键,而不是rows@Mikkel,忘记写入名称[name]
,已更新。谢谢
var data = {
"pebble": {
"status": "active"
},
"stone": {
"status": "active"
},
"stone_ny": {
"status": "active"
},
"stone_london": {
"status": "active"
},
"stone_tokyo": {
"status": "active"
}
}
const query = Object.entries(data).reduce((acc, val)=> {
return val[0].slice(0, 6) === 'stone_' ? {...acc, [val[0]]: val[1]} : acc
}, {})