5 回答

TA貢獻1752條經驗 獲得超4個贊
只需使用一個簡單的正則表達式來匹配石鑰匙,/stone_/gi方法如下:
var names = {
"pebble": {
"status": "active"
},
"stone": {
"status": "active"
},
"stone_ny": {
"status": "active"
},
"stone_london": {
"status": "active"
},
"stone_tokyo": {
"status": "active"
}
}
var matchedNames = {};
for (name in names) {
if (/stone_/gi.test(name)) {
matchedNames[name] = names[name];
}
}
console.log(matchedNames);
Explanation of regex:
g = 全局,匹配字符串中模式的所有實例,而不僅僅是一個
i = 不區(qū)分大小寫(例如,/a/i 將匹配字符串“a”或“A”。

TA貢獻1875條經驗 獲得超5個贊
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

TA貢獻1815條經驗 獲得超13個贊
您可以使用for...in循環(huán)遍歷所有可枚舉字符串屬性(包括繼承一次)。您可以將其與正則表達式匹配結合起來,以檢查密鑰是否滿足您的要求。
const data = {
? "pebble"? ? ? : { "status": "active" },
? "stone"? ? ? ?: { "status": "active" },
? "stone_ny"? ? : { "status": "active" },
? "stone_london": { "status": "active" },
? "stone_tokyo" : { "status": "active" },
};
const result = {};
for (const key in data) {
? if (key.match(/^stone_/)) result[key] = data[key];
}
console.log(result);
但是,如果您當前已經在使用庫,您可以檢查是否有助手存在。一個常見的名稱是pickBy()
接受對象和謂詞(測試函數)。
在洛達什:
const?result?=?_.pickBy(data,?(_,?key)?=>?key.match(/^stone_/));
在拉姆達:
const?result?=?R.pickBy((_,?key)?=>?key.match(/^stone_/),?data); //?or:?const?result?=?R.pickBy(R.flip(R.test(/^stone_/)),?data);
如果輸入是對象,某些庫也可能使用filter()
并返回對象。

TA貢獻1804條經驗 獲得超8個贊
source={
"pebble": {
"status" : "active"
},
"stone": {
"status" : "active"
},
"stone_ny" {
"status" : "active"
},
"stone_london": {
"status" : "active"
},
"stone_tokyo": {
"status" : "active"
}
};
rows = [];
for(var k in source)
if(k.substr(0,6)=="stone_")
rows.push({[k]:source[k]});

TA貢獻1853條經驗 獲得超6個贊
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
}, {})
添加回答
舉報