繁星淼淼
问题:multiply接收两个参数。当multiply作为函数参数提供给 时Array.map,第一个参数将是调用 map 的数组的元素,第二个参数将是元素的索引。解决方案:仅在第一个数组上使用 map x,然后使用相应的第二个数组中的元素y片段:function multiply(x, y) { if (x.map) { return x.map(function(xEl, i) { yEl = y.map ? y[i] : y; // corresponding y Element return multiply(xEl, yEl); }); } if (y.map) {//used, when y is a array and x is number return multiply(y, x); } return x * y;// default }a = [[1],[2]];b= [[3],[4]];c= [[5,6],[7,8]];d= [[1,2],[3,4]];console.log(JSON.stringify(multiply(a,b)));console.log(JSON.stringify(multiply(a,5)));console.log(JSON.stringify(multiply(5,b)));console.log(JSON.stringify(multiply(c,d)));console.log(JSON.stringify(multiply(c,2)));console.log(JSON.stringify(multiply(a,c))); //trims cconsole.log(JSON.stringify(multiply(c,a)));//throws error