有没有办法将键传递到 JavaScript 数组中,其中字符串可能匹配对象的多个值?



所以,如果我只有一个键要匹配,那么像这样:

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"键(quayyayablah)。

我敢肯定答案是我忽略的简单东西。

使用filter而不是findmap来删除值。

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))

最新更新