关于如何去除数组中重复项
3个回答
展开全部
数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程。
从这句话揭示了数组去重的两个关键因素:
找到重复项
去除重复项
本文告诉你在遇到去重问题时该如何思考,并以 JavaScript 为例,进行详细解释。使用 JavaScript 示例主要是因为它环境比较好找,而且直接对象 (Plain Object) 用起来很方便。
JavaScript 的环境:Node.js 或者浏览器的开发者控制台。
找到重复项
找到重复项最关键的算法是判定元素是否相同。判定相同,说起来似乎很简单 —— 用比较运算符就好了嘛!真的这么简单吗?
用 JavaScript 来举个例:
const a = { v: 10 };
const b = { v: 10 };
肉眼观察,这里的a和b相同吧?但是 JavaScript 不这么认为:
console.log(a == b); // false
console.log(a === b); // false
肉眼观察和程序比较使用了不同的判断方法。肉眼观察很直接的采用了字符串比对的方法,而程序压根没管是不是数据相同,只是直接判断它们是不是同一个对象的引用。我们一般会更倾向于使用符合人眼直观判断的方法,所以可能会想到使用JSON.stringify()把对象变成字符串来判断:
console.log(JSON.stringify(a) === JSON.stringify(b)); // true
现在如果我们把a和b略作改变,又该如何?
const a = { v: 10, n: "1" };
const b = { n: "1", v: 10 };
乍一看,a和b不同。用JSON.stringify()的结果来比对,也确实不同。但是仔细一看,他们的属性是完全相同的,唯一的区别在于属性的顺序不一样。那么到底顺序应不应该作为一个判断相同的依据呢?
这个问题现在真没法回答。“该如何”取决于我们的目标,也就是业务需求。
从上面的例子我们可以了解:判断相同并不是一个简单的事情,根据不同的业务要求,需要选择不同的判断方法;而不同的判断方法,可能产生不同的判断结果。
接下来先讲讲常见的判断方法。
最直接的:比较运算符
比较运算符主要用于比较基本类型的值,比如字符串、数、布尔等。
普通比较运算符 (==) 在比较不同类型的值时,会先把它们转换为相同类型再来比较;而严格比较运算符 (===) 则更为严格,会直接将类型不同值判定为不同。这些都是基本的 JavaScript 语法知识。现代开发中为了能更好的利用工具,除极少数特殊情况外,都应该使用===来进行判断。尤其是在 TypeScript 中,几乎都不会出现==了。
JavaScript 中,比较运算符不会比较对象属性,只会比较对象的引用是否相同。如果要比较对象具体信息,需要用到接下来讲到的方法。
从这句话揭示了数组去重的两个关键因素:
找到重复项
去除重复项
本文告诉你在遇到去重问题时该如何思考,并以 JavaScript 为例,进行详细解释。使用 JavaScript 示例主要是因为它环境比较好找,而且直接对象 (Plain Object) 用起来很方便。
JavaScript 的环境:Node.js 或者浏览器的开发者控制台。
找到重复项
找到重复项最关键的算法是判定元素是否相同。判定相同,说起来似乎很简单 —— 用比较运算符就好了嘛!真的这么简单吗?
用 JavaScript 来举个例:
const a = { v: 10 };
const b = { v: 10 };
肉眼观察,这里的a和b相同吧?但是 JavaScript 不这么认为:
console.log(a == b); // false
console.log(a === b); // false
肉眼观察和程序比较使用了不同的判断方法。肉眼观察很直接的采用了字符串比对的方法,而程序压根没管是不是数据相同,只是直接判断它们是不是同一个对象的引用。我们一般会更倾向于使用符合人眼直观判断的方法,所以可能会想到使用JSON.stringify()把对象变成字符串来判断:
console.log(JSON.stringify(a) === JSON.stringify(b)); // true
现在如果我们把a和b略作改变,又该如何?
const a = { v: 10, n: "1" };
const b = { n: "1", v: 10 };
乍一看,a和b不同。用JSON.stringify()的结果来比对,也确实不同。但是仔细一看,他们的属性是完全相同的,唯一的区别在于属性的顺序不一样。那么到底顺序应不应该作为一个判断相同的依据呢?
这个问题现在真没法回答。“该如何”取决于我们的目标,也就是业务需求。
从上面的例子我们可以了解:判断相同并不是一个简单的事情,根据不同的业务要求,需要选择不同的判断方法;而不同的判断方法,可能产生不同的判断结果。
接下来先讲讲常见的判断方法。
最直接的:比较运算符
比较运算符主要用于比较基本类型的值,比如字符串、数、布尔等。
普通比较运算符 (==) 在比较不同类型的值时,会先把它们转换为相同类型再来比较;而严格比较运算符 (===) 则更为严格,会直接将类型不同值判定为不同。这些都是基本的 JavaScript 语法知识。现代开发中为了能更好的利用工具,除极少数特殊情况外,都应该使用===来进行判断。尤其是在 TypeScript 中,几乎都不会出现==了。
JavaScript 中,比较运算符不会比较对象属性,只会比较对象的引用是否相同。如果要比较对象具体信息,需要用到接下来讲到的方法。
展开全部
数组是我学得比较薄弱的部分,以下来自于网络,希望能够帮到你。
1
编写方法,遍历数组原地去重
图示,声明一个数组索引,并向后遍历数组,当遍历的元素和索引指向元素不相等时,索引向后移动,并将当前元素移动到索引处;当遍历的元素和索引指向元素相等时,保持索引不动。
2
声明一个输出数组指定数量元素的方法
图示,方法接受两个参数,数组和指定元素数量,将相关元素输出到控制台
3
编写测试方法
图示,主方法中,指定用例,测试去重,并输出去重后的数组元素
4
运行测试方法
图示,执行主方法,观察控制台输出,符合预期
—来自于网络
1
编写方法,遍历数组原地去重
图示,声明一个数组索引,并向后遍历数组,当遍历的元素和索引指向元素不相等时,索引向后移动,并将当前元素移动到索引处;当遍历的元素和索引指向元素相等时,保持索引不动。
2
声明一个输出数组指定数量元素的方法
图示,方法接受两个参数,数组和指定元素数量,将相关元素输出到控制台
3
编写测试方法
图示,主方法中,指定用例,测试去重,并输出去重后的数组元素
4
运行测试方法
图示,执行主方法,观察控制台输出,符合预期
—来自于网络
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面是三种实现的方式!
//c#代码
private void RemoveRepeat()
{
int x=0;
int label;
int[] b = new int[15];
int[] a =new int[15]{1,0,3,3,0,5,5,6,4,8,9,2,9,5,1};
for (int i=0;i<a.Length;i++)
{
label=0;//标记是否有相同项
for(int j=0;j<x;j++)
{
if(b[j]==a[i])
label=1;
}
if(label==0)
{
b[x]=a[i];
x++;
}
}
for(int k=0;k<x;k++)
{
Response.Write(b[k]);//输出数组b[]
if(k!=x-1)
Response.Write(",");
}
}
//第一种字符型javascript代码
function RemoveRepeat()
{
var tmp = new Array()
var a =new Array("AAAA","B","A","A","B","F","D","C","A","B","A","A","B","C","t")
tmp=a
for (var i=0;i<a.length;i++)
{
for(j=i+1;j<a.length;j++)
{
if(a[i]==a[j]) tmp[i]=null
}
}
var m = 0,ok = new Array()
for(k=0;k<tmp.length;k++)
{
if(tmp[k])
ok[m++] = tmp[k]
}
alert(ok)
}
//第二种数字型javascript代码
function ddd()
{
oldArray = [1,2,1,3,3,4,5,5,6,7,2,2,9,8,9]
var str = oldArray.join(" ");
var reg = /([^ ]+)(.*) /1/g; //利用正则表达式
while(str.match(reg))str=str.replace(reg,"$1$2")
alert(str.split(" "));
}
//c#代码
private void RemoveRepeat()
{
int x=0;
int label;
int[] b = new int[15];
int[] a =new int[15]{1,0,3,3,0,5,5,6,4,8,9,2,9,5,1};
for (int i=0;i<a.Length;i++)
{
label=0;//标记是否有相同项
for(int j=0;j<x;j++)
{
if(b[j]==a[i])
label=1;
}
if(label==0)
{
b[x]=a[i];
x++;
}
}
for(int k=0;k<x;k++)
{
Response.Write(b[k]);//输出数组b[]
if(k!=x-1)
Response.Write(",");
}
}
//第一种字符型javascript代码
function RemoveRepeat()
{
var tmp = new Array()
var a =new Array("AAAA","B","A","A","B","F","D","C","A","B","A","A","B","C","t")
tmp=a
for (var i=0;i<a.length;i++)
{
for(j=i+1;j<a.length;j++)
{
if(a[i]==a[j]) tmp[i]=null
}
}
var m = 0,ok = new Array()
for(k=0;k<tmp.length;k++)
{
if(tmp[k])
ok[m++] = tmp[k]
}
alert(ok)
}
//第二种数字型javascript代码
function ddd()
{
oldArray = [1,2,1,3,3,4,5,5,6,7,2,2,9,8,9]
var str = oldArray.join(" ");
var reg = /([^ ]+)(.*) /1/g; //利用正则表达式
while(str.match(reg))str=str.replace(reg,"$1$2")
alert(str.split(" "));
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |