函数式JavaScript:生成唯一值数组
Functional JavaScript: Produce array of unique values
使用JavaScript中的函数式编程从另一个数组中生成唯一值数组的方法是什么?
这应该做:toUnique([1,1,2,3,4,4]) => [1,2,3,4]
看看 Ramda 函数式 JavaScript libriary 的 uniq 函数。
R.uniq([1, 1, 2, 1]); //=> [1, 2]
R.uniq([{}, {}]); //=> [{}, {}]
R.uniq([1, '1']); //=> [1, '1']
您可以使用 libriary 中的函数或检查源代码...
function uniq(list) {
var idx = -1, len = list.length;
var result = [], item;
while (++idx < len) {
item = list[idx];
if (!_contains(item, result)) {
result[result.length] = item;
}
}
return result;
};
这在之前已经被问了1000次了,但是既然你要求一个函数式编程解决方案,你来了:
head = function(ls) { return ls[0] };
tail = function(ls) { return ls.slice(1) };
empty = function(ls) { return ls.length == 0 };
cons = function(a, b) { return [a].concat(b) };
has = function(x, ls) {
return empty(ls) ? false : head(ls) == x || has(x, tail(ls));
};
_uniq = function(ls, seen) {
return empty(ls) ? [] :
has(head(ls), seen) ?
_uniq(tail(ls), seen) :
cons(head(ls),
_uniq(tail(ls),
cons(head(ls), seen)));
};
uniq = function(ls) {
return _uniq(ls, []);
};
console.log(uniq([1,1,2,3,1,2,5])); // [1,2,3,5]
这是纯粹的功能解决方案,根据要求(实际上是nub
的直端口)。对于实际的问题,请考虑此处的答案之一。
好吧
,如果你不担心性能,我会使用Array.prototype.filter
和Array.prototype.indexOf
,像这样
function toUnique(array) {
return array.filter(function(currentItem, index) {
return (index === array.indexOf(currentItem));
});
}
console.log(toUnique([1, 1, 2, 3, 4, 4]));
# [ 1, 2, 3, 4 ]
如果你可以使用任何其他库,你可以使用 lodash 的 uniq
函数,像这样
_.uniq([1, 1, 2, 3, 4, 4]);
// → [1, 2, 3, 4]
它还可以利用输入数组已经排序的事实。因此,您可能希望像这样调用它
_.uniq([1, 1, 2, 3, 4, 4], true);
// → [1, 2, 3, 4]
相关文章:
- 如何从数组中查找唯一对象
- JavaScript:从对象数组中获取唯一值及其计数
- 创建具有2个唯一数字的Javascript数组
- javascript和具有唯一密钥的es6过滤器数组
- 根据对多个数组唯一的元素创建一个新数组
- 将数组中的重复项转换为唯一项,而不删除Javascript中的任何项
- 映射对象数组,并且仅采用唯一
- Ember JS如何获取具有唯一属性值的数组
- 如何使 JSON 数组唯一
- Javascript:编写一个函数,接收一个数组,然后返回一个只有唯一数字的数组,只删除数组
- 从数组列表中返回唯一的数组
- 推送时请确保数组中的值是唯一的
- 对具有唯一值的对象键的数组进行排序
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- Javascript:如何将对象数组转换为具有排序唯一数组的对象
- 合并并返回唯一数组问题
- 日期的唯一数组
- Javascript唯一数组项
- 以最有效的方法查找唯一数组
- 在Javascript中迭代地声明唯一数组