按分数搜索AFINN-165 json

时间:2017-12-29 12:43:46

标签: javascript json

我正在制作一个情绪调整的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作为返回值。

我希望有人可以帮助我。已经坚持了一段时间了。

2 个答案:

答案 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循环完成后,返回新数组。

&#13;
&#13;
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;
&#13;
&#13;

或者如另一位评论者建议的那样,请使用Array#filter