我正在尝试使用reduce和find helper编写一个数组函数,返回一个唯一数字数组。
var numbers = [1, 1, 2, 3, 4, 4];
// function should return [1, 2, 3, 4]
function unique(array) {
array.reduce((uniqueArray, number) => {
if (uniqueArray.indexOf(find(array.number))) {
uniqueArray.push(array.number);
}
return uniqueArray;
}, []);
}
console.log(unique(numbers));
// undefined
// undefined
运行此代码时,我得到了
在浏览器Javascript控制台中未定义
两次。
答案 0 :(得分:3)
以前的答案解释了错误的原因。所以我只是使用Array#filter
方法添加备用方法。
var numbers = [1, 1, 2, 3, 4, 4];
// function should return [1, 2, 3, 4]
function unique(array) {
return array.filter(function(v, i, arr) {
// compare index with first element index
return i == arr.indexOf(v);
})
}
console.log(unique(numbers));
使用ES6箭头功能。
var numbers = [1, 1, 2, 3, 4, 4];
// function should return [1, 2, 3, 4]
function unique(array) {
return array.filter((v, i, arr) => i == arr.indexOf(v))
}
console.log(unique(numbers));
UPDATE:使用引用对象而不是检查索引。
var numbers = [1, 1, 2, 3, 4, 4],
ref = {};
function unique(array) {
return array.filter(function(v) {
if (!(v in ref)) {
ref[v] = true;
return true;
}
return false;
})
}
console.log(unique(numbers));
答案 1 :(得分:2)
您需要退货声明。
return array.reduce((uniqueArray // ...
// ^^^
更好的查找方法
function unique(array) {
return array.reduce((uniqueArray, number) => {
if (uniqueArray.indexOf(number) === -1) {
uniqueArray.push(number);
}
return uniqueArray;
}, []);
}
var numbers = [1, 1, 2, 3, 4, 4];
console.log(unique(numbers));

现在使用Set
和spread syntax ...
收集新数组中的项目。
function unique(array) {
return [... new Set(array)];
}
var numbers = [1, 1, 2, 3, 4, 4];
console.log(unique(numbers));

答案 2 :(得分:2)
你几乎没有错误。首先,您需要从函数中返回值,并检查元素是否已经在uniqueArray
中,您可以使用indexOf()
== -1
。
var numbers = [1, 1, 2, 3, 4, 4];
function unique(array) {
return array.reduce((uniqueArray, number) => {
if (uniqueArray.indexOf(number) == -1) uniqueArray.push(number)
return uniqueArray;
}, []);
}
console.log(unique(numbers));
使用ES6 / 7,您可以使用includes()
和箭头功能。
var numbers = [1, 1, 2, 3, 4, 4];
function unique(arr) {
return arr.reduce((r, n) => (!r.includes(n) ? r.push(n) : 1) && r , []);
}
console.log(unique(numbers));
答案 3 :(得分:0)
您始终可以使用Array.includes
。
function SillyFunctionName(array) {
"use strict";
var uniqueArray = [];
for (var i = 0; i < array.length; i++) {
if (uniqueArray.includes(array[i])) {
break;
} else {
uniqueArray.push(array[i]);
}
}
return uniqueArray;
}