获取 Javascript 数组的唯一值
Get unique values of a Javascript array
我正在尝试在JavaScript中编写一个函数来获取数组的唯一值,但我的代码无法正常工作。我知道还有其他更好更简单的方法,但我不明白为什么我的代码不起作用,我想了解它。
该函数有两个for循环,如果外索引和内索引不同并且这些索引位置的值相同,则将内索引的位置推入另一个数组。当内部 for 循环结束时,另一个数组中注释的索引在原始数组中被空值替换,稍后将被删除。
输入为:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
但输出是:1 2 null null null null null 4 4 4 4 5 5 5 5 5
我不知道出了什么问题,有人可以帮助我吗?
function uniqueArrayValues(vector) {
var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i != j && j != null && i != null && i < j ) {
indexRepeated.push(j);
}
}
for (let i in indexRepeated) {
if (vector[indexRepeated[i]] != null) {
vector.splice(vector[indexRepeated[i]], 1, null);
}
}
}
}
你快到了。
splice() 方法的第一个参数是起始索引,即开始更改数组的索引。
在您的代码中,vector.splice(vector[indexRepeated[i]], 1, null);
您在 vector
数组中的那个索引处传递 值 而不是那个索引。这就是意外输出的原因。
只需将该行更改为 vector.splice(indexRepeated[i], 1, null);
并过滤 null
个值。
实例:
function uniqueArrayValues(vector) {
var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i != j && j != null && i != null && i < j) {
indexRepeated.push(j);
}
}
for (let i in indexRepeated) {
if (vector[indexRepeated[i]] != null) {
vector.splice(indexRepeated[i], 1, null);
}
}
}
return vector.filter(value => value !== null); // Can also use vector.filter(value => value);
}
var arr = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];
console.log(uniqueArrayValues(arr));
这里有一些其他更简单的方法来从数组中获取唯一值。
1) 使用filter():
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = arr.filter((value, index, arr) => index === arr.indexOf(value));
console.log(unique);
2) 使用Set():
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = [...new Set(arr)];
console.log(unique);
从数组中获取所有唯一值的一种简单方法是将数组转换为集合。
let arr = [1,2,2,3,3,3,4,4,4,5,5,5,5,5];
let uniqueArr = new Set(arr);
console.log(uniqueArr); ///Set { 1, 2, 3, 4, 5 }
如你所想,这样定义函数即可;
function uniqueArrayValues(vector) {
//var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i < j ) {
vector[j]=null;
}
}
}
}
indexRepeated 的循环异常。
顺便说一句,你可以将这些代码 vector.splice(vector[indexRepeated[i]], 1, null);
更改为 vector.splice(indexRepeated[i], 1, null);
,它也有效。
我正在尝试在JavaScript中编写一个函数来获取数组的唯一值,但我的代码无法正常工作。我知道还有其他更好更简单的方法,但我不明白为什么我的代码不起作用,我想了解它。
该函数有两个for循环,如果外索引和内索引不同并且这些索引位置的值相同,则将内索引的位置推入另一个数组。当内部 for 循环结束时,另一个数组中注释的索引在原始数组中被空值替换,稍后将被删除。
输入为:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
但输出是:1 2 null null null null null 4 4 4 4 5 5 5 5 5
我不知道出了什么问题,有人可以帮助我吗?
function uniqueArrayValues(vector) {
var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i != j && j != null && i != null && i < j ) {
indexRepeated.push(j);
}
}
for (let i in indexRepeated) {
if (vector[indexRepeated[i]] != null) {
vector.splice(vector[indexRepeated[i]], 1, null);
}
}
}
}
你快到了。
splice() 方法的第一个参数是起始索引,即开始更改数组的索引。
在您的代码中,vector.splice(vector[indexRepeated[i]], 1, null);
您在 vector
数组中的那个索引处传递 值 而不是那个索引。这就是意外输出的原因。
只需将该行更改为 vector.splice(indexRepeated[i], 1, null);
并过滤 null
个值。
实例:
function uniqueArrayValues(vector) {
var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i != j && j != null && i != null && i < j) {
indexRepeated.push(j);
}
}
for (let i in indexRepeated) {
if (vector[indexRepeated[i]] != null) {
vector.splice(indexRepeated[i], 1, null);
}
}
}
return vector.filter(value => value !== null); // Can also use vector.filter(value => value);
}
var arr = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];
console.log(uniqueArrayValues(arr));
这里有一些其他更简单的方法来从数组中获取唯一值。
1) 使用filter():
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = arr.filter((value, index, arr) => index === arr.indexOf(value));
console.log(unique);
2) 使用Set():
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = [...new Set(arr)];
console.log(unique);
从数组中获取所有唯一值的一种简单方法是将数组转换为集合。
let arr = [1,2,2,3,3,3,4,4,4,5,5,5,5,5];
let uniqueArr = new Set(arr);
console.log(uniqueArr); ///Set { 1, 2, 3, 4, 5 }
如你所想,这样定义函数即可;
function uniqueArrayValues(vector) {
//var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i < j ) {
vector[j]=null;
}
}
}
}
indexRepeated 的循环异常。
顺便说一句,你可以将这些代码 vector.splice(vector[indexRepeated[i]], 1, null);
更改为 vector.splice(indexRepeated[i], 1, null);
,它也有效。