我没有从该函数获得预期的结果。我所期望的是,我将有四个数组,其中包含多个项目。但是,相反,对于控制台中的所有内容我都无法定义。这是我对该功能的说明:
您的工作是遍历此数组,并使用正则表达式和Array.push()方法将具有相似性的项目放入四个全新的数组中:
- 一个以
og
结尾且长度不超过3个字母的项目名为og
- 以
at
结尾且长度超过3个字母的项目命名为at
- 一个以数字开头的商品名为
numberFirst
- 一个名为
numberLast
的数字结尾的项目
对于我的if和else if语句,我让他们测试该项目是否与我在顶部创建的表达式匹配。如果匹配,则评估为true。我相信我的if陈述是错误的,或者我是如何创建用于模式识别的正则表达式的。
var mainList = ['catalog', 'dog', 'cat', 'hog', 'muskrat', 'World War 3', 'blog', 'frog', '25th of March', 'bat', 'log', 'March 25', 'slog', '10 Downing street', 'flat', 'fat', 'splat', 'blat', 'frat', 'rat', '23 Skidoo', 'Catch 22', '10 4 Good Buddy', 'fog'];
var re = /$og/; //one named 'og' for items that end with 'og' and are 3 letters long or less//
var re2 = /$at/; //one named 'at' for items that end with 'at' that are longer than 3 letters//
var re3 = /[^0-9]/; //one named 'numberFirst' for items that start with numbers//
var re4 = /$[0-9]/; //one named 'numberLast' for items that end with numbers
var arrayOG = [];
var arrayAT = [];
var arrayNumberFirst = [];
var arrayNumberLast = [];
function loop(item) {
for (var i = 0; i < mainList.length; i++) {
if (re.test(item) == true && item.length <= 3) {
arrayOG.push(item);
console.log(arrayOG);
} else if (re2.test(item) == true && item.length > 3) {
arrayAT.push(item);
console.log(arrayAT);
} else if (re3.test(item) == true) {
arrayNumberFirst.push(item);
console.log(arrayNumberFirst);
} else if (re4.test(item) == true) {
arrayNumberLast.push(item);
console.log(arrayNumberLast);
}
}
}
loop();
答案 0 :(得分:1)
您要在函数定义中将item
声明为函数参数
function loop(item) {
但是稍后在调用函数loop()
时,您实际上并没有传递任何东西。
然后,对于每个循环问题,该项目都是不确定的。
代替
function loop(item) {
for (var i = 0; i < mainList.length; i++) {
...
}
}
您应该尝试
function loop() {
for (var i = 0; i < mainList.length; i++) {
const item = mainList[i];
...
}
}