javascript - 收到错误“预期表达式”。在三元运算符的 else 部分尝试 for 循环时
问题描述
我正在运行以下代码,但收到错误“预期表达式”。在 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;
}
我的目的是比较两个数据数组。我最终会让用户在网页上的文本框中输入一些数据,这段代码将数据抓取到两个数组中,然后比较它们,提醒用户两组数据是否不同或不是。
解决方案
在条件(三元)运算符?:
内部,只允许使用表达式,不允许使用语句。
您可以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));
推荐阅读
- python - 访问 DataFrame 元素的速度出奇的慢
- asp.net-core - Asp.net core,调试时绕过授权
- laravel - 使用 gmail smtp-relay(数据库队列驱动程序)的 laravel swift-mailer 异常“预期响应代码 250,但得到一个空响应”
- android - 在创建活动 Android 之前启动协程
- javascript - 未调用socket.io“连接”事件
- postgresql - 创建 hstore 索引时出现 Liquibase Postgres 错误
- swiftui - 使用 NavigationLink 时不重新加载选项卡项的 SwiftUI 问题
- javascript - 在 html、JS 和 Node 之间向 MongoDB 发送数据的正确方法
- python - Python 获取所有股票行情
- bash - Bash:同一行上多个命令的输出