如何成功调用此函数以返回值? JSON.parse()

时间:2019-04-28 17:00:05

标签: javascript json

我正在尝试解决此代码在规模平衡方面的挑战。包含两个元素的秤,第一个是天平上的两个正整数权重(左侧和右侧),第二个元素是可用权重列表(正整数)。

例如,如果一个秤是["[5, 9]", "[1, 2, 6, 7]"],则表示有一个秤,秤的左侧为5,右侧为9。规模可以像这样2,6

保持平衡

条件

  1. 秤的第一个元素只能包含2个权重
  2. 可以在秤的一侧增加两个砝码以使其平衡 3.如果无法平衡秤,则您的程序应返回``秤不平衡''

我已经能够使用硬编码的值来完成功能的console.log,并且它起作用了。此外,如果没有数字可以平衡,该函数将返回“比例不平衡”。但是我似乎无法动态调用该函数。

HTML

...
<input type="text" id="balance" required>
...
<input type="text" id="weights" required>

<div class="button" id="calculateWeight" onclick="balanceIt()"> 
<input type="submit" value="Calculate Weight"></div>
<div id="displayResult"></div>

我想成功调用ScaleBalancing函数以返回一个字符串(如果已调用)。当我尝试ScaleBalancing([`${[balance]}`, `${[weights]}`]))时,它返回

  

未捕获的SyntaxError:JSON中位置1处的意外令牌o       在JSON.parse()

JavaScript

function ScaleBalancing(strArr) {
let balance = JSON.parse(strArr[0]);
let weight = JSON.parse(strArr[1]);

const one = balance[0]
const two = balance[1];


for (let i = 0; i < weight.length; i++) {
    let weighted = '' + weight[i];
    if (one + weight[i] === two || two + weight[i] === one) {
        //let weighted = '' + weight[i];
        return weighted;
    }
    for (let j = i + 1; j < weight.length; j++) {

        if (one + weight[i] + weight[j] === two ||
            two + weight[i] + weight[j] === one ||
            one + weight[i] === two + weight[j] ||
            two + weight[i] === one + weight[j]
        ) {
            let balancedScale = '' + weight[i] + ',' + weight[j];;
            return balancedScale;

        }
    }

}

return 'scale imbalanced';
}

var balanceIt = function() {
   let weights = document.getElementById("weights").value;
   let balance = document.getElementById("balance").value;
   const Scale = ScaleBalancing([`${[balance]}`, `${[weights]}`]);

 document.getElementById("displayResult").innerText = Scale;
  console.log(Scale);
  };

  document.getElementById("calculateWeight").onclick = balanceIt;

2 个答案:

答案 0 :(得分:1)

它对我也不起作用。我所做的就是从javascript定义它,因此我确定在调用它之前就已经确定了该方法。

我相信所发生的是on click方法与balanceIt方法不在同一范围内,这就是为什么它未被识别的原因。

希望它对您有帮助

var balanceIt = function() {
  let weights = document.getElementById("weights").value;
  let balance = document.getElementById("balance").value;
  let scale = ScaleBalancing([`${[balance]}`, `${[weights]}`]);

  document.getElementById("displayResult").innerText = scale;
};

document.getElementById("calculateWeight").onclick = balanceIt;

答案 1 :(得分:1)

例如,如果您输入的是“ 1,2”,则

`${[balance]}`

只会导致“ 1,2”,这不是正确的JSON字符串。

您想要的可能是(请注意方括号的不同位置):

ScaleBalancing([`[${balance}]`, `[${weights}]`]))