Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于字符串数组中求和的对应值返回字符串_Javascript_Arrays - Fatal编程技术网

Javascript 如何基于字符串数组中求和的对应值返回字符串

Javascript 如何基于字符串数组中求和的对应值返回字符串,javascript,arrays,Javascript,Arrays,正如本主题所述,最好的方法是什么,以便在传递情绪/值数组时,根据javascript?中的数字映射显示最接近的值 假设“高兴”和“高兴”是同一回事,“沮丧”和“悲伤”是同一回事。我尝试过的代码似乎非常冗长,如果我添加更多的情绪/状态(例如愤怒),代码就会变得臃肿。除了情绪数组,任何新的函数、数据结构和变量都可以更改/引入 例如,我可以得到一个情绪列表: let emotions = ['Happy','Happy','Sad','Glad','Angry']; 现在我想返回一个字符串,它反映

正如本主题所述,最好的方法是什么,以便在传递情绪/值数组时,根据javascript?中的数字映射显示最接近的值

假设“高兴”和“高兴”是同一回事,“沮丧”和“悲伤”是同一回事。我尝试过的代码似乎非常冗长,如果我添加更多的情绪/状态(例如愤怒),代码就会变得臃肿。除了情绪数组,任何新的函数、数据结构和变量都可以更改/引入

例如,我可以得到一个情绪列表:

let emotions = ['Happy','Happy','Sad','Glad','Angry']; 
现在我想返回一个字符串,它反映了基于这5种情绪的“最近的”情绪

举个更好的例子,让我们假设与每种情绪对应的值为:

愤怒=1,快乐=2,悲伤=3

我试着说:

var numb=0;
for(var i=0;i=1.5&&<2.5)
返回“快乐”;
如果(平均值>2.5)
返回“悲伤”;
如果(平均值==1.5)
返回“生气或高兴”;
如果(平均值==2.5)
返回“快乐或悲伤”;
基于此情感列表,我的预期结果是:
2(*快乐*)+2(*快乐*)+3(*悲伤*)+2(*快乐*)+1(*愤怒*)=10

然后除以5(情感数组长度),得到2。
因此,应该作为字符串返回的结果是
“Happy”

比如说,我添加了第四种情绪/感觉。。。我会添加越来越多的条件,在逻辑上检查数字的范围会变得越来越复杂

我把所有的情绪都作为一个整体来看待,并试图找出一个代表所有情绪的整体


这样做的最佳方法是什么,这样代码看起来干净,并且我可以支持更多的状态,而不会让代码行变得太长?

类似这样的事情怎么样:

有两个对象常量:
emotionsValues
:在这里,你可以为你想要的每种情绪分配一个值,就像给每种情绪分配一个分数一样。
emotionsRank
:这里是每个值的最终结果,基于平均值,您将从这里得到结果

现在:

  • 按参数接收情感数组

  • 根据每个映射情感的值减少它(使用
    情感值

  • 平均

  • 看看地板值+天花板值除以2是否等于数字本身(这意味着它正好是一半),所以使用“情感或情感”

  • 或者,如果不是一半,那就转到最近的那一个,获得正确的情绪。别忘了检查平均值是否低于最后一个等级的1或更大(本例中为3)

  • const情绪值={
    "愤怒":一,,
    "快乐":二,,
    “高兴”:2,
    "悲哀":三,,
    "倒":三,,
    }
    常量情感库={
    1:“愤怒”,
    2:“快乐”,
    3:“悲伤”,
    }
    函数getEmotion(arrayEmot){
    让numb=arrayEmot.reduce((acc,v)=>Number(情绪值[v])+acc,0);
    设平均值=numb/arrayEmot.length;
    最小值=数学楼层(平均值)
    设max=Math.ceil(平均值)
    如果((最小值+最大值)/2==平均值和最小值!=最大值){
    返回emotionsRank[min]+“或”+emotionsRank[max]
    }否则{
    设四舍五入=平均值<1?1:平均值>3?3:数学四舍五入(平均值);
    返回情绪库[四舍五入];
    }
    }
    let emotionsTest=[“快乐”、“快乐”、“悲伤”、“高兴”、“愤怒”];
    console.log(getEmotion(emotionsTest))
    让情绪2=[‘快乐’、‘快乐’、‘悲伤’、‘悲伤’];
    console.log(getEmotion(emotionsTest2))
    • 您可以创建函数emo to value及其对应函数:value to emotionS:
    • 然后将数组中的每个情感映射到它的值
    • 做你标准的数学作业
    • 并通过相互作用回归情感
    const emoToValue={
    高兴:1,,
    快乐:1,,
    悲伤:2
    }
    const valueToEmos=Object.entries(emoToValue).reduce((acc[emo,val])=>{
    acc[val]=acc[val]| |【】
    acc[val]。推送(emo)
    返回acc
    }, {})
    //计算平均值:
    功能运动(情绪){
    if(emotions.length==0)返回“”
    const avg=emotions.reduce((s,em)=>s+emoToValue[em],0)/emotions.length
    返回值toemos[Math.round(avg)].join('or')
    }
    console.log('str',avgEmotion(['Happy','Happy','Sad','Happy'])//高兴还是高兴
    
    console.log('str',avgEmotion(['Happy','Happy','Sad','Sad'])//Sad
    您可以创建一组索引,并通过使用索引进行过滤来获取值

    函数getEmotion(情感、价值){
    var值=新集合([值+0.5,值-0.5,数学四舍五入(值)]);
    返回emotations.filter((e,i)=>values.has(i+1)).join('and');
    }
    log(getEmotion(['Happy'、'Sad'、'Happy'、'nargy'、'nargy'],1));
    log(getEmotion(['Happy'、'Sad'、'Happy'、'angle'、'Angry'],1.5));
    
    log(getEmotion(['Happy'、'Sad'、'Happy'、'angle'、'Angry'],1.7))此函数显式检查“中间”情况以及超出范围的值(因为它基于索引):


    Math.round()?
    @CalvinNunes这可能是其中的一部分,但在我的例子中,我希望1.5表示“高兴或悲伤”(中间地带),而不仅仅是默认的四舍五入。我认为这个问题可能有一个更好的答案-你可以查看他们的主题规则你想使用数组索引来获取字符串吗?你可以去掉小数(如果不是整数的话),然后得到
    emotations[x]+'或'+emotations[x+1]
    我想这里有些混乱。用户传递的是情绪数组(字符串)还是浮点值数组?这是所有情绪的平均值吗?就好像有一个人
    function getEmotion(emotions, value) {
    
      // Out of range
      if ( value > emotions.length ) return emotions[emotions.length - 1];
      if ( value < 1 ) return emotions[0];
    
      // Determine if decimal is .5
      let mid = value % 1 === .5;
      // Round the value to the nearest integer
      let rounded = Math.round(value);
    
      return mid ? `${emotions[rounded - 2]} or ${emotions[rounded - 1]}` : emotions[rounded - 1];
    
    }
    
    let emotions = ['Happy', 'Happy', 'Sad', 'Glad', 'Angry'];
    
    console.log(getEmotion(emotions, -23));    // Happy
    console.log(getEmotion(emotions, 0));      // Happy
    console.log(getEmotion(emotions, 1));      // Happy
    console.log(getEmotion(emotions, 2.43));   // Happy
    console.log(getEmotion(emotions, 2.5));    // Happy or Sad
    console.log(getEmotion(emotions, 3.1));    // Sad
    console.log(getEmotion(emotions, 155.65)); // Angry