Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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
Javascript JS:JSON数据查询,比如SQL_Javascript_Json - Fatal编程技术网

Javascript JS:JSON数据查询,比如SQL

Javascript JS:JSON数据查询,比如SQL,javascript,json,Javascript,Json,我有以下JSON数据 { “卵石”{ “状态”:“活动” }, “石头”{ “状态”:“活动” }, “石头城”{ “状态”:“活动” }, “伦敦之石”{ “状态”:“活动” }, “东京石头城”{ “状态”:“活动” } } 在JS中,有没有一种方法可以获取所有与stone匹配的行并返回最后3行?只需使用一个简单的正则表达式,通过以下方式使用/stone\ugi来匹配stone键: var名称={ “卵石”:{ “状态”:“活动” }, “石头”:{ “状态”:“活动” }, “石头城”

我有以下JSON数据

{
“卵石”{
“状态”:“活动”
},
“石头”{
“状态”:“活动”
},
“石头城”{
“状态”:“活动”
},
“伦敦之石”{
“状态”:“活动”
},
“东京石头城”{
“状态”:“活动”
}
}

在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
}, {})