我正在定义一个函数,该函数返回与字典中的值配对的键的列表。
我可以打印第一个密钥,但是不会打印第二个或以后的密钥。我知道我应该列出一个清单,但我不知道该怎么做。
dict1 = {'cat' : 1, 'dog': 3, 'bird':4,'lizard':4,'hamster': 5 };
function keyList(dict, value) {
for(x in dict)
if(dict[x] == value)
return x;
}
console.log(keyList(dict1, 4));
当我运行当前程序时,我只会看到鸟。 我希望代码同时返回鸟和蜥蜴。
答案 0 :(得分:4)
只需遍历键并过滤掉那些键,其值不等于您传递的值。
dict1 = {'cat' : 1, 'dog': 3, 'bird':4,'lizard':4,'hamster': 5 }
function keyList(dict, value) {
return Object.keys(dict).filter(x => dict[x] === value);
}
console.log(keyList(dict1, 4))
答案 1 :(得分:1)
而不是立即返回,而是将值推入数组,然后返回数组
dict1 = {'cat' : 1, 'dog': 3, 'bird':4,'lizard':4,'hamster': 5 }
function keyList(dict, value) {
let keys = [];
for(x in dict)
if(dict[x] == value){keys.push(x);}
return keys;
}
console.log(keyList(dict1, 4))
答案 2 :(得分:1)
您可以使用Object.keys()
来获取对象的键作为数组(例如def concat_short_words(s):
result = ""
for word in s.split():
if len(word) <= 4:
result += word
return(result)
concat_short_words('The temperature is 22.625 ˚C')
'Theis˚C'
)。
Array.filter()
然后允许您指定要保留的项目。
在您的情况下,您想保留“值为4的键” ,因此要保留["cat", "dog", "bird", "lizard", "hamster"]
。
obj[key] === value
答案 3 :(得分:0)
您可以尝试这种方法。可能存在执行类似操作的过滤器功能:
dict1 = {'cat':1,'dog':3,'bird':4,'lizard':4,'hamster':5}
function getPropertiesByValue(object, value) {
Object.keys(object).forEach(key => {
if (object[key] != value ) delete object[key];
});
return object;
}
alert(JSON.stringify(getPropertiesByValue(dict1, 4)));