返回一个带有参数pass属性的数组

时间:2018-05-16 15:12:10

标签: javascript arrays string-length

目前正面临这一挑战。

// 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;
}

这给我一个空数组。

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

5 个答案:

答案 0 :(得分:6)

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

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',
));

答案 1 :(得分:4)

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

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

应该做的伎俩

答案 2 :(得分:3)

您的代码工作正常,但您从1开始而不是索引0。 数组有一个基于零的索引,因此当你只传递一个参数时,你得到的是初始的空数组,因为循环根本没有被执行。

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

的更多详细信息

答案 3 :(得分:2)

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

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

答案 4 :(得分:0)

使用隐式对象arguments,您可以获取密钥,如果传递的对象没有该attr,则检查attr length

const stringLengths = function() {
  return Object.keys(arguments).map(k => arguments[k].length || 0);
}

console.log(stringLengths('ele', 'from', 'stackoverflow', 2222));