“返回”未输出所有结果

时间:2018-12-19 06:14:08

标签: javascript return console.log

我有一个简单的函数,我要使用大小写混合的字符串数组,并用首字母大写输出数组中的每个值。

当我使用'return'元素调用函数时,控制台日志仅在数组->'London'中产生第一个值。

如何为每个字符串生成首字母大写的整个城市???

注意:当我用console.log(result)替换return时,函数调用可以顺利进行,但是在控制台中,在数组以大写字母输出结果之后,“ undefined”值类型对应于该行'console.log(capFirstLetter(cities));'

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  for(let i = 0; i < list.length; i++) {
    let input = list[i].toLowerCase();
    let firstLetter = input[0];
    let result = input.replace(firstLetter, firstLetter.toUpperCase());
    return restult;
  }
}

console.log(capFirstLetter(cities));

注意:这就是控制台中的内容,我用console.log(result)替换了返回结果

London ->script.js:60
Manchester ->script.js:60
Birmingham ->script.js:60
Liverpool->script.js:60
undefined ->script.js:64

script.js.60与行console.log(result)相关联& script.js.64与该行相关

2 个答案:

答案 0 :(得分:0)

您应该使用.map将一个数组转换为另一个数组-在。map回调中返回新的数组元素:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  return list.map((input) => {
    input = input.toLowerCase();
    let firstLetter = input[0];
    return input.replace(firstLetter, firstLetter.toUpperCase());
    console.log(result);
  });
}

console.log(capFirstLetter(cities));

或者,为了更加简洁,请使用正则表达式和替换函数:

const cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

const capFirstLetter = list => list.map(
  (input) => input.replace(
    /(.)(.*)/g,
    (_, firstLetter, rest) => firstLetter.toUpperCase() + rest.toLowerCase()
  )
);
console.log(capFirstLetter(cities));

使用旧式for循环,您必须在每次迭代结束时push到新数组:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  const newArr = [];
  for(let i = 0; i < list.length; i++) {
    let input = list[i].toLowerCase();
    let firstLetter = input[0];
    let result = input.replace(firstLetter, firstLetter.toUpperCase());
    newArr.push(result);
  }
  return newArr;
}

console.log(capFirstLetter(cities));

答案 1 :(得分:0)

  

当我使用'return'元素调用函数时,控制台日志仅在数组->'London'中产生第一个值。

发生这种情况是因为您的return在第一个循环之后停止了迭代(for),所以result仅包含第一个城市。

  

注意:当我用console.log(result)替换return时,函数调用可以顺利进行,但是在控制台中,在数组以大写字母输出结果之后,“ undefined”值类型对应于该行console.log(capFirstLetter(cities));

发生这种情况是因为您的函数未返回任何内容(在JS中,这意味着该函数将返回未定义的值。)

要使其正常工作,您可以使用地图:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = list => list.map(city => city.charAt(0).toUpperCase() + city.slice(1).toLowerCase());

console.log(capFirstLetter(cities));