gpt4 book ai didi

javascript - 与剩余运算符和循环混淆

转载 作者:行者123 更新时间:2023-12-02 22:17:35 24 4
gpt4 key购买 nike

我在兜圈子,苦苦寻找解决办法;任何教育/指导都会真正帮助我。

我可能有很多正在对其进行字符串操作的数组。

我创建了一个有用的调试函数,来帮助我打印数组中元素的长度;后字符串操作。

这是单个数组函数,它的工作原理;但是我想使用剩余运算符,因为我想向它提供大量数组作为参数:

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

我正在兜圈子,所以任何指导都会很有帮助。 :)

最佳答案

您的 for...in 方法的问题是您在循环内返回(另请注意,您实际上应该只使用 for...in for iterating object properties ,而不是数组索引)。 return 导致您的函数退出并随后结束循环。

最后一个代码片段的问题是您将 num 视为单个数字,但是 num 实际上是一个数组。当您执行 ...args 时,args 将成为您传递给它的所有参数的数组。如果传递 "one""two" 参数将为 ["one", "two"]。如果您传递 ["one", "two"], ["third", "four"], args 将是一个数组数组[[“一”,“二”],[“三”,“四”]]。为了使您的 .map() 函数正常工作,您确实希望正在处理的数组看起来像 ["one", "two", "third", "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 与映射函数一起使用:

const calc_arr = (...args) =>
Array.from(args, arr => arr.map(({length}) => length));

const arr1 = ["one", "two", "three"];
const arr2 = ["four", "five", "six"];
console.log(calc_arr(arr1, arr2));

关于javascript - 与剩余运算符和循环混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com