我试图在数字数组上使用 .filter、.sort 和 .reduce 以返回由逗号和空格分隔的字符串
Posted
技术标签:
【中文标题】我试图在数字数组上使用 .filter、.sort 和 .reduce 以返回由逗号和空格分隔的字符串【英文标题】:Im trying to use .filter, .sort, and .reduce on an array of numbers to return a string separated by a comma and a space 【发布时间】:2022-01-04 16:57:03 【问题描述】:我应该编写一个函数,它接受一个数字数组并返回一个字符串。该函数应该使用过滤器、排序和归约来返回一个仅包含奇数的字符串,并以逗号分隔升序。
我似乎无法让我的 .reduce 方法实际返回任何内容,并且我的 if 条件似乎无法正常工作......(例如,它在最后一个数字的输出之后添加了一个逗号和空格,例如这个“3, 17,”)
这是我目前编写的代码...
const numSelectString = (numArr) =>
// use .filter to select only the odd numbers
numArr.filter((num) => num % 2 !== 0)
// use. sort to sort the numbers in ascending order
.sort((a,b) => a-b)
// use reduce to create the string and put the commas and spaces in
.reduce((acc, next, index) =>
if (index+1!==undefined)
return acc = acc + next + ', ';;
else
return acc + next;
,'')
const nums = [17, 34, 3, 12]
console.log(numSelectString(nums)) // should log "3, 17"
有人有时间帮我整理一下reduce方法吗?我试图传入索引以确定reduce是否在最后一个元素上进行迭代以不输出最后一个元素之后的“,”......但还没有让它工作......另外,我还是不明白为什么我的输出总是“未定义”!
感谢您的帮助!
【问题讨论】:
index+1!==undefined
将始终为 true
,因为数字始终为 !== undefined
在numSelectString中至少需要一个return语句。 return numArr.filter...
为什么.reduce()
调用试图模仿.join(", ")
会做什么?
一旦你有了奇数,你就不需要使用.reduce()
- 有这么多的迭代来得到字符串;只需使用.join(', ')
。
【参考方案1】:
您可以将检查替换为仅进行加法并且没有起始值。
const
numSelectString = numArr => numArr
.filter((num) => num % 2 !== 0)
.sort((a, b) => a - b)
.reduce(
(acc, next, index) => index
? acc + ', ' + next
: next,
''
);
console.log(numSelectString([17, 34, 3, 12]));
console.log(numSelectString([2, 4, 6]));
console.log(numSelectString([1, 2]));
【讨论】:
或者...只需使用.join(", ")
而不是.reduce()
o.O
@Andreas,是的,但这不是reduce
。
我认为他不被“允许”(或者他不想)使用join
,否则我同意,那会更容易【参考方案2】:
不要使用index+1!==undefined
,试试这个
const numSelectString = (numArr) =>
const numArrLength = numArr.length;
const arr = [...numArr];
arr
.filter((num) => num % 2 !== 0)
.sort((a,b) => a - b)
.reduce((acc, next, index) =>
if (index < numArrLength - 1) return acc += `$next, `;
else return acc + `$next`;
, "")
return arr;
不改变参数也被认为是一种好习惯。
另一种方法
使用.join()
方法很容易。
const numSelectString = (numArr) =>
const arr = [...numArr]
arr
.filter((num) => num % 2 !== 0)
.sort((a,b) => a-b)
.join(", ");
return arr;
【讨论】:
以上是关于我试图在数字数组上使用 .filter、.sort 和 .reduce 以返回由逗号和空格分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章
常用数组API forEach every some sort map filter slice indexOf