永发信息网

javascript 数组去重,要求对无论多复杂的数组都有效,请写上详细注释,答案满意的再加50分!

答案:2  悬赏:70  手机版
解决时间 2021-03-20 03:30
  • 提问者网友:愿为果
  • 2021-03-19 20:45
javascript 数组去重,要求对无论多复杂的数组都有效,请写上详细注释,答案满意的再加50分!
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-03-19 21:53
JS的对象Object的属性本身就具有唯一性。利用好就行。
所列数据中country的多行输入只有一行是有效的。

而city中的唯一性不明,需要另外对待,但可以以name处理,也可以以value处理,
需要指定一个。就是给出你理想的处理后结果作为样例,好进一步实现。追问额,有木有具体代码?追答你针对刚刚的例子给出你想要的、预想的处理结果,我看清楚你要什么结果才能写。
(给出的命题是泛化的,却要具体的代码,就必须先把要求具体化。)
在题意不完善(有歧义一种错误的泛化命题),我利用对象的特性,这样简单代码,就能避免重复

=============
输出
{
"country":"china",
"city":{
"北京":0,
"上海":1,
"深圳":3,
"广州":4,
"重庆":5
}
}追问arrayClass.prototype.removeRepetitive = function(){
var arr = this.arr;
var len = arr.length;
var newArr = [];
if(len<2) return arr;
for(var i=0; i for(var j=i+1; j if(arr[i] === arr[j]){
j=++i;
}
}
newArr.push(arr[i]);
}
return newArr;
};
这是我在网上找的双重for循环代码追答这样去重复效率在O(MN),也是仅仅是去值重复,属于"抢救措施"
用结构上分析数据,设计好数据结构,用好唯一键值,不会产生重复数据,是“先天完善”。
我的在效率上快一个数量级,而如果直接设计好结构将不会占用额外处理时间。
这种属于典型数据结构和算法的问题,
数据不能用“长什么样”泛化胡乱概括。
JS基本数据类型,Object对象和Array对象有很大的性质区别。对“重复”的定义都不一样
country=1 country=‘1’ country='china'是键重复,值却不重复!
{name:'北京',value:0},{name:'北京',value:0},属于“值对象的值”重复(但对象却不重复)。
"无区别去去除,是盲目的!!!
具体应用时对重复的定义也不一样。。所以根本不需要这种什么都不区分的去重复
全部回答
  • 1楼网友:归鹤鸣
  • 2021-03-19 23:00
if (data.country in data) {
delete data.country;
}

var sortable = [];

for (var i = 0; i < data.city.length; i++) {
sortable[i] = data.city[i].name;
}

sortable.sort();

for (var j = 1; j < sortable.length; ) {
if (sortable[j-1] === sortable[j]) {
sortable.splice(j,1);
} else {
j++;
}
}
for (var n = 0; n < sortable.length; n++) {
for (var x = 0; x < data.city.length; x++) {
if (sortable[n] == data.city[x].name) {
sortable[n] = {
name: sortable[n],
value: data.city[x].value
}
}
}
}
data.city = sortable;

输出结果:
data = {
country: 'china',
city: [
{name:'上海',value:1},
{name:'北京',value:0},
{name:'广州',value:4},
{name:'深圳',value:3},
{name:'重庆',value:5}
]
}

是这个意思不?..追问我的意思其实是,无论这个数组长什么模样(不知道它是什么样的),写一个方法,可以把里面的重复项去掉。追答其实一楼说的是对的. 只包含数值的数组和包含了对象的数组去起重来方法是不一样的...需要根据具体问题制定具体方法...只包含了数值或字符串的数组可以用你找到的方法来去重. 但是如果你的数组里包含了对象, 而对象又包括了多个名称/属性. 就得制定到底根据哪个属性来去重. 所以你提的要求基本上是不可能的...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯