首页 > 解决方案 > 我需要在js中制作更好的单词计算功能

问题描述

我现在正在学习JS。我解决了这个问题,但我不喜欢我写的 My_Soultion 。

你能给我更好的灵魂,让它变得更好吗?

拼字游戏单词计算器

实现 word_calc 方法以返回正确的 Scrabble 单词分数。分数已经设置好供您使用,并在字典中进行管理:


one_point_values = ["a", "e", "i", "o", "u", "l", "n", "r", "s", "t"];
two_point_values = ["d", "g"];
three_point_values = ["b", "c", "m", "p"];
four_point_values = ["f", "h", "v", "w", "y"];
five_point_values = ["k"];
eight_point_values = ["j","x"];
ten_point_values = ["z","q"];


word_calc("zoo") // 12
word_calc("bus") // 5


我的代码



function word_calc(word) {



    var inputArr = word.split("");
    var countArr = [];
    var dataArr = [one_point_values,two_point_values,three_point_values,four_point_values,five_point_values,eight_point_values,ten_point_values];
    var total = 0;
    function sum(array) {
        var countArr = [];
        var sum = 0;
        if(array[0]=== one_point_values[0]) {
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 1;
           }
            countArr = [];
        } 
        else if (array[0]=== two_point_values[0]){
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 2;
         }
            countArr = [];  
        }
        else if (array[0]=== three_point_values[0]) {
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 3;
         }
            countArr = [];
        }
        else if (array[0]=== four_point_values[0]) {
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 4;
         }
             countArr = [];
        }
        else if (array[0]=== five_point_values[0]) {
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 5;
       }
            countArr = [];
        }
        else if (array[0]=== five_point_values[0]) {
             for (let i = 0; i < inputArr.length; i ++ ) {  
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 8;
       }
            countArr = [];
        } 
        else if (array[0]=== ten_point_values[0]) {
            for (let i = 0; i < inputArr.length; i ++ ) {   
                if (array.includes(inputArr[i])) {
                countArr.push(inputArr[i])
            } 
            sum = countArr.length * 10;
          }
            countArr = [];
    }
        total = total + sum;
    }

    dataArr.forEach((ele)=>{
    sum(ele);
    })


 return total;


}

标签: javascript

解决方案


首先制作所有字符点对象。然后获取传递函数中每个字符的分数并总结所有。

减少

const char_points = {
  "a": 1,
  "e": 1,
  "i": 1,
  "o": 1,
  "u": 1,
  "l": 1,
  "n": 1,
  "r": 1,
  "s": 1,
  "t": 1,
  "d": 2,
  "g": 2,
  "b": 3,
  "c": 3,
  "m": 3,
  "p": 3,
  "f": 4,
  "h": 4,
  "v": 4,
  "w": 4,
  "y": 4,
  "k": 5,
  "j": 8,
  "x": 8,
  "z": 10,
  "q": 10
};

const reducer = (accumulator, currentValue) => accumulator + currentValue;


function word_calc(w) {
  // convert your string array to relevant numbers 
  const splitted_array = w.split("").map(function(item) {
    return char_points[item]
  });

  // You can use simple loop to sum up or reduce to reduce and sum the array
  const total = splitted_array.reduce(reducer);
  console.log(total)
}


word_calc("zoo") // 12
word_calc("bus") // 5


推荐阅读