【发布时间】:2020-01-24 00:30:46
【问题描述】:
正如主题所述,最好的方法是什么,以便在传递一组情绪/值时,根据 javascript 中的数字映射显示最接近的值?
假设“高兴”与“快乐”是一回事,而“沮丧”与“悲伤”是一回事。如果我添加更多情绪/状态(即愤怒),我尝试过的代码似乎非常冗长并且变得臃肿。除了情绪数组之外,任何新函数、数据结构和变量都可以更改/引入。
例如,我可以得到一个情绪列表:
let emotions = ['Happy','Happy','Sad','Glad','Angry'];
现在我想根据这 5 种情绪返回一个反映“最接近”情绪的字符串。
举个更好的例子,假设每种情绪对应的值是:
愤怒 = 1,快乐 = 2,悲伤 = 3
我正在尝试类似:
var numb = 0;
for (var i = 0; i < emotions.length; i++) {
if (numb == 'Angry')
numb += 1;
if (numb == 'Happy' || numb == 'Glad')
numb += 2;
if (numb == 'Sad' || numb == 'Down')
numb += 3;
}
var average = numb / emotions.length;
// check which number is closer to
if (average < 1.5)
return 'Angry';
if (average >= 1.5 && < 2.5)
return 'Happy';
if (average > 2.5)
return 'Sad';
if (average == 1.5)
return 'Angry or Happy';
if (average == 2.5)
return 'Happy or Sad';
基于此情绪列表,我的预期结果是:2(*Happy*) + 2(*Happy*) + 3(*Sad*) + 2(*Happy|Glad*) + 1(*Angry*) = 10
然后除以 5(情绪数组长度),得到 2。
所以应该以字符串形式返回的结果是 "Happy"。
假设我添加了第四种情感/感觉......我会添加越来越多的这些条件,并且在检查数字范围的逻辑中变得更加复杂。
我正在查看整个情绪列表,并试图提出代表整个列表的整体情绪。
最好的方法是什么让代码看起来干净并且我可以支持更多的状态而不会让代码行变得太长?
【问题讨论】:
-
Math.round()? -
@CalvinNunes 这可能是其中的一部分,但就我而言,我想要它,以便 1.5 意味着“快乐或悲伤”(中间立场),而不仅仅是默认向上取整。跨度>
-
我觉得这个问题在codereview.stackexchange.com 上可能会有更好的归宿——你可以查看他们的主题规则
-
是否要使用数组索引来获取字符串?你可以去掉小数点(如果不是整数),然后得到
emotions[x] + ' or ' + emotions[x + 1] -
我认为这里有些混乱。用户传递的是情绪数组(字符串)还是浮点值数组?
标签: javascript arrays