在我的编码类中进行练习时,我不断收到此错误,而且我似乎无法弄清楚原因。我希望显示最多“ ha”的名称。
目前,输出正确,但错误不会消失。
function haCounter(arr) {
if (arr){
var jmlHa = arr.match(/ha/g) || []
return jmlHa.length
}
else {
return 0
}
}
function theLaughter(arr) {
var result = arr.reduce(function (x,y){
console.log ((haCounter(x[1]) > haCounter(y[1])) ? x[0] : y[0] )
}
)
return result
}
测试用例和所需的输出:
console.log(theLaughter([
['Tony', 'haha, get lost, squidward!'],
['Mantis', 'hahahahahahaha'],
['Thanos', 'I am inevitable'],
['Rocket', 'Boom! hahahaha']
])) // 'Mantis'
我试图像这样返回三元数,但是它返回了“螳螂”的“火箭”字样。
function theLaughter(arr) {
var result = arr.reduce(function (x,y){
return ((haCounter(x[1]) > haCounter(y[1])) ? x[0] : y[0] )
}
)
return result
}
以下是错误附带的指针:
console.log ((haCounter(x[1]) > haCounter(y[1])) ? x[0] : y[0] )
^
TypeError: Cannot read property '1' of undefined.
答案 0 :(得分:0)
reduce
的工作方式是,将前一个回调的返回值作为第一个参数传递到对回调的下一个调用中。因此,您的reduce
回调必须始终返回有用的值。
const result = [6, 4, 1].reduce((x, y) => {
const rv = x + y;
console.log(`x = ${x}, y = ${y}, returning ${rv}`);
return rv;
});
console.log(`result = ${result}`);
您的回调不返回任何内容,因此它有效地返回undefined
。由于它在第一次调用时返回undefined
,因此在第二次调用中x
是undefined
。这是上面没有回报的东西:
const result = [6, 4, 1].reduce((x, y) => {
const rv = x + y;
console.log(`x = ${x}, y = ${y}, not returning ${rv}`);
});
console.log(`result = ${result}`);
我不太清楚您希望回调做什么,所以我不知道它应该返回什么,但是有效:
var result = arr.reduce(function(x,y) {
console.log((haCounter(x[1]) > haCounter(y[1])) ? x[0] : y[0] );
return /*something here */;
});
答案 1 :(得分:0)
我相信这就是您想要的。此方法返回的笑声最多。
function mostLaughs(input){
var most = (input[0][1].match(/ha/g) || []).length;
var name = input[0][0]
for(var i = 0; i < input.length; i++){
if((input[i][1].match(/ha/g) || []).length > most){
most = (input[i][1].match(/ha/g) || []).length;
name = input[i][0]
}
}
return name;
}
console.log(mostLaughs([
['Tony', 'haha, get lost, squidward!'],
['Mantis', 'hahahahahahaha'],
['Thanos', 'I am inevitable'],
['Rocket', 'Boom! hahahaha']
]))