【发布时间】:2019-04-14 03:47:53
【问题描述】:
我正在尝试复制数组中的每个元素,但使用的是函数式样式。
我目前有这个:
["a", "b", "c"]
我得到了这个:
["a","a","b","b","c","c"]
到目前为止,我已经尝试了以下方法,将每个元素映射到一个数组,然后使用 flat() 获取一维数组。有没有更清洁的方法,因为感觉就像我在滥用地图和平面。
["a", "b", "c"].map(item => [item, item]).flat();
有没有更好的方法来做到这一点?
我试图提供一个尽可能简单的示例,但遗漏了一些细节。实际输入未排序,因为元素不可比较。 是这样的:
[
{
a:"a"
b:"b"
},
{
c: 1
d: 2
},
{
apple: {},
sellers: ["me", "her"]
}
]
重复的结果应该是这样的,其中重复的元素彼此相邻:
[
{
a:"a"
b:"b"
},
{
a:"a"
b:"b"
},
{
c: 1
d: 2
},
{
c: 1
d: 2
},
{
apple: {},
sellers: ["me", "her"]
},
{
apple: {},
sellers: ["me", "her"]
}
]
【问题讨论】:
-
如果您将问题编辑为包括以下内容会很有帮助: 1. 输入数组是否总是按照您的示例进行排序? 2.输出的顺序应该和输入的顺序一致吗?一些答案假设输入是有序的。
-
如果不考虑复杂性和性能,那么基本上可以使用解构[...arr,...arr].sort()。顺便说一句,函数式编程不是指箭头函数(如您在示例中使用的那样),而是指函数的行为和含义,它应该通过接收参数和返回结果来像数学函数一样工作。所以在你的情况下,你想写这样的东西(与函数式编程保持一致): const duplicateArrayItems = (arr) => [...arr,...arr].sort();让数组 = ['a','b','c'], 结果 = duplicateArrayItems(array);
-
@MattMorgan 感谢您指出这一点,我试图提供一个尽可能简单的示例,但这导致重要的细节被遗漏了。 1)输入未排序,因为真正的实际输入是不可排序的复杂对象数组。 2) 输出的顺序应该是 a,a,b,b,c,c 重复的元素彼此相邻
-
@Reek 感谢您的澄清。我已编辑我的答案以反映您的新输入数据。
标签: javascript arrays object functional-programming