【问题标题】:Getting the error 'Expression expected.' when attempting a for loop on the else part of a ternary operator收到错误“预期表达式”。在三元运算符的 else 部分尝试 for 循环时
【发布时间】:2018-12-24 11:58:54
【问题描述】:

我正在运行以下代码,但收到错误“预期表达式”。在 for 循环上。

let nums1 = [1,2,3,4,5].map(String);
let nums2 = [1,2,3,4,5].map(String);

let compare = (a1, a2) => {
  (a1.length != a2.length) ? result = false : for(num in a1) {
    if(a1[num] != a2[num]) {
      result = false;
      break;
    }
 }
return result;
}

compare(nums1, nums2);

我已经运行了以下代码(一个更冗长的非 ES6 等效代码),它确实有效。

let nums1 = [1,2,3,4,5].map(String);
let nums2 = [1,2,3,4,5].map(String);

function temp(arr1, arr2) {
  let result = true;
  if(arr1.length != arr2.length) {
    result = false;
  } else {
    for(let i = 0; i < arr1.length; i++) {
    if(arr1[i] != arr2[i]) {
      result = false;
      break;
    }
   }
 }
 return result;
 }

我的目的是比较两个数据数组。我最终会让用户在网页上的文本框中输入一些数据,这段代码将数据抓取到两个数组中,然后比较它们,提醒用户这两组数据是否不同或不是。

【问题讨论】:

  • 在条件运算符内部,不允许任何语句,因为它不是表达式(也许?尚未)。

标签: javascript arrays for-loop ternary-operator


【解决方案1】:

conditional (ternary) operator ?: 内,只允许expressions,不允许statements

您可以使用Array#every 并检查两个数组相同索引处的每个值。

let nums1 = [1, 2, 3, 4, 5].map(String);
let nums2 = [1, 2, 3, 4, 5].map(String);

const compare = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);

console.log(compare(nums1, nums2));

【讨论】:

  • 这行得通,谢谢。我需要检查 'every()' 方法。
猜你喜欢
  • 2017-07-10
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
相关资源
最近更新 更多