与rest运算符和循环混淆

问题描述 投票:0回答:2

我正四处逛逛,努力寻找解决方案;任何教育/指导都会对我有所帮助。

我可能有很多要进行字符串处理的数组。

我创建了一个有用的调试功能,以帮助我打印数组中元素的长度;发布字符串操作。

这是单数组函数,它的工作原理;但是我想使用rest运算符,因为我想将它作为参数提供给很多数组:

let arr1 = ["one", "two", "three"];
let arr2 = ["four", "five", "six"];
function debug_qty(arr) {
    let post_arr_filter = arr.map(function(word) {
        return `${word.length}`;
    });
    return post_arr_filter;
};

[我已经尝试过下面的方法,但是它只打印第一个数组,当我附加.length时,得到3,而不是3,3,5(各个字符串的长度)。

let arr1 = ["one", "two", "three"];
let arr2 = ["four", "five", "six"];

function check_length(...args) {
    for (let arrs in args) {
        return args[arrs].length;
    };
};

我的下一个尝试-这似乎是找到两个数组长度(我认为),再次不是子元素。

function calc_arr(...args) {
    let result = args.map(function(nums) {
        return nums.length;
    });
    return result;
}

我正四处逛逛,所以任何指导都是最有帮助的。 :)

javascript
2个回答
0
投票

使用map()函数两次,一次获取数组,再一次获取其中的单词:

let arr1 = ["one", "two", "three"];
let arr2 = ["four", "five", "six"];

function calc_arr(...args) {
    return args.map((arr) => {
       return arr.map((word) => {
           return word.length;
       })
    })
}

const res = calc_arr(arr1,arr2);
console.log(res);

1
投票

for...in方法的问题在于,您将返回inside循环(还请注意,您实际上应该仅使用for...in for iterating object properties,而不是数组索引)。 for...in使您的函数退出,然后结束循环。

最后一个代码段的问题是您将return视为一个数字,但是num实际上是一个数组。当您执行num时,...args成为所有参数的数组。如果传递args"one",则args将为"two"。如果传递["one", "two"]["one", "two"]["three", "four"],则将是数组args的数组。为了使[["one", "two"], ["three", "four"]]函数正常工作,您确实希望正在处理的数组看起来像.map(),并且所有元素都在一个数组中。要以这种形式获取数组,可以使用["one", "two", "three", "four"],或者,因为使用的是.flat()

.map()

或者,您可以使用function calc_arr(...args) { let result = args.flat().map(function(nums) { return nums.length; }); return result; } let arr1 = ["one", "two", "three"]; let arr2 = ["four", "five", "six"]; console.log(calc_arr(arr1, arr2));,它将回调函数返回的数组展平为一个更大的数组。这意味着.flatMap()的回调函数将需要返回一个计数数组:

.flatMap()

如果要数组数组,可以将function calc_arr(...args) { return args.flatMap(arr => arr.map(str => str.length)); } let arr1 = ["one", "two", "three"]; let arr2 = ["four", "five", "six"]; console.log(calc_arr(arr1, arr2));与映射功能一起使用:

Array.from
© www.soinside.com 2019 - 2024. All rights reserved.