首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射函数js断言测试中的forEach未运行

映射函数js断言测试中的forEach未运行
EN

Stack Overflow用户
提问于 2018-02-28 20:09:42
回答 1查看 475关注 0票数 0

我目前正在为map/ cubeAll函数进行断言测试。我已经多次修改了我的逻辑和语法,我还没有发现为什么编译器会抛出一个"Type array.forEach不是一个函数“错误。我读过关于TypeError错误的MDN页面,我知道我的“forEach”试图从一个函数调用一个值,并且Array.prototype.forEach需要一个回调函数才能正常工作。根据我的逻辑,在我的代码(下面)中,我确实有一个回调函数,并且我试图通过将数组中的每个元素传递回这个调用来调用一个值。怎么啦?

代码语言:javascript
复制
function map(array, callbackFunction) {
  var newArray = [];
  array.forEach(function(element) {
    newArray.push(callbackFunction(element));
  });
  return newArray;
}

function cubeAll(numbers) {
  return map(numbers, function(n) {
    return n * n * n;
  });
}

function assertArraysEqual(actual, expected, testName) {
  let arraysHaveEqualLength = actual.length === expected.length;
  let arraysHaveSameElements = actual.every(function(ele,idx){
    return ele === expected[idx];
  });
  if(arraysHaveEqualLength && arraysHaveSameElements){
    console.log(`${testName} has passed.`);
  }else {
    console.log(`${testName} has FAILED. Expected ${expected} and got ${actual} instead.`);
  }
}

我试着测试的案例:

代码语言:javascript
复制
assertArraysEqual(map([3,2,1],cubeAll),[27,8,1], 'it should return a new array with all the elements cubed');
assertArraysEqual(map([3,2,1],cubeAll),[27,7,1], 'it should return a new array with all the elements cubed');

控制台中的错误:

代码语言:javascript
复制
 array.forEach(element => newArray.push(callbackFunction(element)));
        ^

TypeError: array.forEach is not a function

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 20:15:22

函数cubeAll接收一个数字而不是一个数组。

代码语言:javascript
复制
function cubeAll(n) {
    return n * n * n;
}

您可以使用内置对象Math和函数.pow(...)

代码语言:javascript
复制
return Math.pow(n, 3);

对于支持ES2016的环境(常绿浏览器,节点7+)

代码语言:javascript
复制
function cubeAll(n) {
    return n ** 3;
}

代码语言:javascript
复制
function map(array, callbackFunction) {
  var newArray = [];
  array.forEach(function(element) {
    newArray.push(callbackFunction(element));
  });
  return newArray;
}

function cubeAll(n) {
  return n ** 3;
}

function assertArraysEqual(actual, expected, testName) {
  let arraysHaveEqualLength = actual.length === expected.length;
  let arraysHaveSameElements = actual.every(function(ele,idx){
    return ele === expected[idx];
  });
  if(arraysHaveEqualLength && arraysHaveSameElements){
    console.log(`${testName} has passed.`);
  }else {
    console.log(`${testName} has FAILED. Expected ${expected} and got ${actual} instead.`);
  }
}


assertArraysEqual(map([3,2,1],cubeAll),[27,8,1], 'it should return a new array with all the elements cubed');
assertArraysEqual(map([3,2,1],cubeAll),[27,7,1], 'it should return a new array with all the elements cubed');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49037733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档