所以,如果我只有一个键要匹配,那么像这样:
var str = "foo";
let [key,val] = Object.entries(obj).find(([key,val]) => val== str);
return key;
会工作得很好。但是,如果值匹配,有没有办法添加多个键?
给出可能与上述字符串匹配的对象示例:
obj = {
quay: "foo",
key1: "blargh",
yaya: "foo",
idnet: "blat",
blah: "foo",
hahas: "blargh"
}
我想做的是根据上面匹配的varstr
返回所有的"foo"键(quay
,yaya
和blah
)。
我敢肯定答案是我忽略的简单东西。
使用filter
而不是find
和map
来删除值。
const obj = { quay: "foo", key1: "blargh", yaya: "foo", idnet: "blat", blah: "foo", hahas: "blargh" }
const str = 'foo';
const keys = Object.entries(obj).filter(([, val]) => val === str).map(([key]) => key);
console.log(keys);
使用Object.keys()
获取键数组,并使用Array.filter()
过滤它们。在过滤器的谓词函数中,使用键 -obj[key]
从对象中获取相关值,并将其与str
进行比较。
const str = 'foo'
const obj = {"quay":"foo","key1":"blargh","yaya":"foo","idnet":"blat","blah":"foo","hahas":"blargh"}
const keys = Object.keys(obj).filter(key => obj[key] === str)
console.log(keys)
您可以像现在一样获取所有条目,但不要使用 find,而是使用要查找的str
上的值过滤所有条目并将其映射到列表。喜欢这个:
const str = "foo";
const obj = {
quay: "foo",
key1: "blargh",
yaya: "foo",
idnet: "blat",
blah: "foo",
hahas: "blargh"
}
const repeated = Object.entries(obj)
.filter(([key, val]) => val === str)
.map(([key, val]) => key);
console.log(repeated);
另一种方式:
const obj = {
quay: "foo",
key1: "blargh",
yaya: "foo",
idnet: "blat",
blah: "foo",
hahas: "blargh"
}
let items = Object.fromEntries(Object.entries(obj).filter(([key, val]) => val === 'foo'));
console.log(Object.keys(items))