我在想,使用JavaScript将数组拆分为两个不同的数组的最佳方法是什么,但要保持函数式编程的范围。
假设这两个数组应该根据某些逻辑创建。例如,将一个数组拆分只包含少于四个字符的字符串,而另一个数组则包含其余字符串。
const arr = ['horse', 'elephant', 'dog', 'crocodile', 'cat'];
我考虑了不同的方法:
筛选器:
const lessThanFour = arr.filter((animal) => {
return animal.length < 4;
});
const fourAndMore = arr.filter((animal) => {
return animal.length >= 4;
});
对我来说,这个方法的问题在于你需要两次处理数据,但它非常易读。如果你有一个相当大的数组,这样做两次会有很大影响吗?
Reduce(归约):
const threeFourArr = arr.reduce((animArr, animal) => {
if (animal.length < 4) {
return [[...animArr[0], animal], animArr[1]];
} else {
return [animArr[0], [...animArr[1], animal]];
}
}, [[], []]);
数组的第0个索引包含小于四的数组,而第1个索引包含大于三的数组。
我不太喜欢这个数据结构,因为它似乎会带来一些问题,因为它是一个嵌套的数组。我考虑使用reduce构建一个对象,但我无法想象它会比数组内嵌数组的解决方案更好。
我已经在网上查看了类似的问题以及Stack Overflow,但许多这样做的方法都使用push()
打破了不可变性的思想,或者它们有着非常难懂的实现方式,这在我看来破坏了函数式编程的表达力。
还有其他方法吗?(当然是函数式的)
const lessThanFour = arr.filter(animal => animal.length < 4);
const fourAndMore = arr.filter(animal => animal.length >= 4);
- kevin ternetanimalArr[0].push(animal); return animalArr
)将更具性能优势。 - Sergey.push()
,也不创建数组的数组?不确定期望结果是什么?或者,必须使用特定方法来返回期望的结果吗? - guest271314