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

例举一个数组vardata={country:1,country:'1',country:1,country:'1',country:1,country:'1',coun... 例举一个数组
var data = {
country:1,
country:'1',
country:1,
country:'1',
country:1,
country:'1',
country:china,
city:[
{name:'北京',value:0},
{name:'北京',value:0},
{name:'上海',value:1},
{name:'北京',value:0},
{name:'深圳',value:3},
{name:'广州',value:4},
{name:'北京',value:0},
{name:'上海',value:1},
{name:'北京',value:0},
{name:'北京',value:0},
{name:'重庆',value:5}
]
};
效率相对要高
展开
 我来答
darkminded
2011-12-09 · TA获得超过281个赞
知道答主
回答量:72
采纳率:0%
帮助的人:93.4万
展开全部
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}
]
}

是这个意思不?..
追问
我的意思其实是,无论这个数组长什么模样(不知道它是什么样的),写一个方法,可以把里面的重复项去掉。
追答
其实一楼说的是对的. 只包含数值的数组和包含了对象的数组去起重来方法是不一样的...需要根据具体问题制定具体方法...只包含了数值或字符串的数组可以用你找到的方法来去重. 但是如果你的数组里包含了对象, 而对象又包括了多个名称/属性. 就得制定到底根据哪个属性来去重. 所以你提的要求基本上是不可能的...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2011-12-09 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1945万
展开全部
JS的对象Object的属性本身就具有唯一性。利用好就行。
所列数据中country的多行输入只有一行是有效的。

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

var data = {
country:1,
country:'1',
country:1,
country:'1',
country:1,
country:'1',
country:'china',
city:[
{name:'北京',value:0},
{name:'北京',value:0},
{name:'上海',value:1},
{name:'北京',value:0},
{name:'深圳',value:3},
{name:'广州',value:4},
{name:'北京',value:0},
{name:'上海',value:1},
{name:'北京',value:0},
{name:'北京',value:0},
{name:'重庆',value:5}
]
};
var c=new Object;
with(data){
for(var i=0;i
=============
输出
{
"country":"china",
"city":{
"北京":0,
"上海":1,
"深圳":3,
"广州":4,
"重庆":5
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式