【问题标题】:Return an array with the length property of arguments passes返回具有参数传递的长度属性的数组
【发布时间】:2018-10-26 17:16:55
【问题描述】:

目前卡在这个挑战上。

// stringLengths takes in four strings
// it returns an array containing the length of each string
// Example: stringLengths('mushroom', 'onion', '', 'garlic') returns [8, 5, 0, 6] 

function stringLengths(str1, str2, str3, str4) {

}

目前有

function stringLengths(str1, str2, str3, str4) {
    var arr = [];
    for (var i = 1; i < arguments.length; i++) {
        arr.push(arguments[i].length);
    }

    return arr;
}

这会返回一个空数组。

如何将每个参数的长度属性推入Array 并返回包含每个参数长度的数组?

【问题讨论】:

  • 它对我有用,除了 i 必须从 0 开始,因为数组在 JS 中是从 0 开始的。
  • yest 试过了,从索引 0 开始

标签: javascript arrays string-length


【解决方案1】:

您可以使用 ...Array.map,它们是 ES6 功能。所以你可以处理任意数量的字符串。

function stringLengths(...args) {
  return args.map(x => x.length);
}

console.log(stringLengths(
  'str1',
  'je suis un chocolat',
  'les croissants sont bons',
));

更简洁

const stringLengths = (...args) => args.map(x => x.length);

console.log(stringLengths(
  'str1',
  'je suis un chocolat',
  'les croissants sont bons',
));

【讨论】:

  • 我喜欢这个,因为你特别扁平化了参数而不是使用参数对象。仅供参考,这适用于箭头函数,参数不适用。我建议这是最佳答案
【解决方案2】:

如果你只想要一个长度数组:

function stringLengths(str1, str2, str3, str4) {
  return Array.from(arguments).map((x) => x.length);
}

应该做的伎俩

【讨论】:

  • 根据 MDN 文档,arguments 没有 map 方法,所以这不是有效的实现
【解决方案3】:

您的代码运行良好,只是您从1 开始,而不是索引0。 数组有一个从零开始的索引,因此当你只传递 1 个参数时,你会得到初始的空数组,因为循环根本没有执行。

function stringLengths(str1, str2, str3, str4) {
  var arr = [];
  for (var i = 0; i < arguments.length; i++) {
    arr.push(arguments[i].length);
  }

  return arr;
}

var x = stringLengths('123', '123456789', '12345');
console.log(x);

更多关于访问数组元素here

【讨论】:

  • 只是补充一点,arguments 不是一个数组,而是类似数组并且从零开始。它只有数组的length 属性。例如,它没有 shiftpush。但是,您可以使用数组方法,例如 .map(),甚至可以使用扩展运算符 (...arguments)。有关示例,请参阅其他答案之一。
【解决方案4】:

您的代码运行良好。如果你想要所有的参数长度,你只需要用 i=0 而不是 1 开始你的循环。

function stringLengths(str1, str2, str3, str4) {
  var arr = [];
  for (var i = 0; i < arguments.length; i++) {
    arr.push(arguments[i].length);
  }

  return arr;
}

console.log(stringLengths("hello", "okay", "doh"));

【讨论】:

    【解决方案5】:

    使用隐式对象arguments 可以获得键,如果传递的对象没有该属性,请检查属性length

    const stringLengths = function() {
      return Object.keys(arguments).map(k => arguments[k].length || 0);
    }
    
    console.log(stringLengths('ele', 'from', 'stackoverflow', 2222));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2020-08-16
      • 2022-11-23
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多