我有一个对象,我想通过一个字符串在其中搜索。对象中的数据包含我要更新该对象的字符串,因此结果中将仅包含该字符串的数据。
我尝试了以下代码:
let obj = {320936614713847: "Nibaru", 612610972204514: "Slevníme", 633965056629062: "Eye of wisdom"}
let matches = obj.filter(s => s.includes(document.getElementById('pageSearchBox').value));
console.log(matches);
答案 0 :(得分:1)
.filter
不是对象的一部分的方法。因此obj.filter
无法正常工作。但是,您可以改为将对象转换为值数组,然后将使您可以在所有与搜索查询不匹配的值中使用.filter
。然后,您可以使用.reduce()
将过滤后的键值数组重建为对象。
请参见以下示例:
let obj = {320936614713847: "Nibaru", 612610972204514: "Slevníme", 633965056629062: "Eye of wisdom"}
let searchStr = "Nib";
let matches = Object.entries(obj).filter(([_, v]) => v.includes(searchStr))
.reduce((acc, [k, v]) => ({...acc, [k]: v}), {})
console.log(matches);
答案 1 :(得分:0)
您不能filter
对象,只能过滤列表。
知道这一点,您可以执行以下操作:
let obj = {
320936614713847: "Nibaru",
612610972204514: "Slevníme",
633965056629062: "Eye of wisdom"
}
let matches = Object
.keys(obj)
.filter(s =>
obj[s] === document.getElementById('pageSearchBox').value
);
console.log(matches);
如果要按键过滤:
let obj = {
320936614713847: "Nibaru",
612610972204514: "Slevníme",
633965056629062: "Eye of wisdom"
}
let matches = Object
.values(obj)
.filter(s =>
s === document.getElementById('pageSearchBox').value
);
console.log(matches);
答案 2 :(得分:0)
将正则表达式用于类似于SQL中的LIKE
的运算符。
您可以查看示例片段。这将在对象中搜索与LIKE
子句'%iba%'
匹配的任何内容。
let obj = {320936614713847: "Nibaru", 612610972204514: "Slevníme", 633965056629062: "Eye of wisdom"}
let matches = []
// Run thorugh object
Object.keys(obj).forEach(kv => {
if (/.*iba.*/.test(obj[kv])) { // ... LIKE '%iba%'
matches.push(obj[kv]);
}
});
console.log(matches);
这就像SQL语句:
SELECT val FROM obj WHERE val LIKE '%iba%';
答案 3 :(得分:0)
使用fromEntries
:
let obj = {320936614713847: "Nibaru", 612610972204514: "Slevníme", 633965056629062: "Eye of wisdom"}
let matches = Object.fromEntries(Object.entries(obj).filter(([, v]) => v.includes("Nib")));
console.log(matches);
reduce
支持的版本更好:
let obj = {320936614713847: "Nibaru", 612610972204514: "Slevníme", 633965056629062: "Eye of wisdom"}
let matches = Object.entries(obj).filter(([, v]) => v.includes("Nib")).reduce((a, [k, v]) => (a[k] = v, a), {});
console.log(matches);