我正在制作一个情绪调整的Youtube搜索引擎,它将得分(通过Microsoft Azure Emotion API从网络摄像头图像读取)映射到AFINN-165列表中选择的几个单词,然后执行Youtube搜索。
代码用Node& amp; Express(通过GET请求返回答案)。
我正在尝试按字的值搜索JSON。例;当我给出函数(5)时,它将返回所有得分为5的单词。 JSON的结构如下:
var data = {
word: score,
word: score,
word: score,
};
我将其包装在
下面的数组中function getWordsByScore() {
var afinnKeys = Object.keys(afinn);
var afinnArray = [afinn]
console.log(afinnKeys.length);
for (var i = 0; i < afinnKeys.length; i++) {
var word = String(afinnKeys[i]);
return(afinnArray[0].word);
}
}
不知何故,我无法让它发挥作用。我试图通过在AfinnKeys中创建一个键数组来获得实际的'单词'。但是通过forloop将这个单词提供给afinnArray [0]只是将undefined作为返回值。
我希望有人可以帮助我。已经坚持了一段时间了。
答案 0 :(得分:1)
这样的事情对你有帮助吗?
var score = 3;
var data = {
'firstword': 1,
'secondword': 2,
'thirdword': 3,
'forthword': 3
};
var result = Object.keys(data).filter(function (key) {
return data[key] === score
});
console.log(result);
答案 1 :(得分:0)
您未定义的原因是因为您的for循环运行一次然后立即返回。
它尝试返回的值为afinnArray[0].word
,当您可能打算word
使用字符串变量时,它会在afinnArray[0]
对象上查找属性afinnArray[0][word]
word
作为属性名称。
您也永远不会将分数传递给该功能,因为它不会基于分数。
您真正需要做的就是将传入函数的分数与afinn对象中的分数进行比较,方法是使用获得for循环的word
变量中的单词作为关键字(&#39) ; s已经是一个字符串,因此不需要将其转换为一个字符串)。然后,如果分数匹配,则将单词推送到新数组。 for循环完成后,返回新数组。
var afinn = {
a: 1,
b: 1,
c: 0,
d: 0,
e: 2,
f: 2
};
function getWordsByScore(score) {
var afinnKeys = Object.keys(afinn);
var afinnArray = []
for (var i = 0; i < afinnKeys.length; i++) {
var word = afinnKeys[i];
if(afinn[word] == score){
afinnArray.push(word)
}
}
return afinnArray
}
console.log(getWordsByScore(1))
&#13;
或者如另一位评论者建议的那样,请使用Array#filter