一数组 中 对象属性值 相同的 合并? 本帖最后由 html5cloud 于 2013-02-27 01:03:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <script type="text/javascript">var x=[];var y=[];var z=[]; arr = [ {a:1 , b:1 , c:1}, {a:2 , b:1 , c:2}, {a:3 , b:3 , c:3}, {a:1 , b:1 , c:4}, {a:5 , b:5 , c:5}] for(var i in arr){ for(var j in arr[i]){ if(j=="a"){ x.push(arr[i][j]); }else if(j=="b"){ y.push(arr[i][j]); }else{ z.push(arr[i][j]); } } } var f={}; f.a=x.join(","); f.b=y.join(","); f.c=z.join(","); for(var i in f){ alert(i+":"+f[i]); }</script>最笨的方法 var arr = [ { a : 1 , b : 1 , c : 1}, { a : 2 , b : 1 , c : 2}, { a : 3 , b : 3 , c : 3}, { a : 1 , b : 1 , c : 4}, { a : 5 , b : 5 , c : 5} ] , result = {} , temp = {}; for(var i = 0 ; i < arr.length ; ++i){ for(var j in arr[i]){ if(!temp[j]){ temp[j] = {}; result[j] = []; } if(!temp[j][arr[i][j]]){ result[j].push(arr[i][j]); } temp[j][arr[i][j]] = arr[i][j]; } } console.log(result); var unionObjectArray = function(arr, atr){ var r = [], t = {}, x, y, z; for(var i = 0, il = arr.length; i < il; i++){ t[arr[i][atr]] = t[arr[i][atr]] || []; t[arr[i][atr]].push(i) } for(var p in t)if(t.hasOwnProperty(p)){ x = {}; for(var i = 0, il = t[p].length; i < il; i++){ z = arr[t[p][i]]; for(var q in z)if(z.hasOwnProperty(q)){ x[q] = null; } } for(var q in x)if(x.hasOwnProperty(q)){ y = {}; for(var i = 0, il = t[p].length; i < il; i++){ z = arr[t[p][i]]; if(z[q] != null) y[z[q]] = 1; } for(var s in y)if(y.hasOwnProperty(s)){ if(x[q] == null)x[q] = s; else{ x[q] = [x[q]]; x[q].push(s) } } } r.push(x) } t = x = y = z = null; return r;};//测试:var printObjectArray = function(arr){ var buf = [], b; for(var i = 0, il = arr.length; i < il; i++){ buf.push("{"); b = false; for(var p in arr[i])if(arr[i].hasOwnProperty(p)){ if(b)buf.push(','); b = true; buf.push(p + ":" + (arr[i][p] instanceof Array ? "[" + arr[i][p] + "]" : arr[i][p])) } buf.push("}<br>") } document.write(buf.join(''));},arr = [ {a:1 , b:1 , c:1}, {a:2 , b:1 , c:2}, {a:3 , b:3 , c:3}, {a:1 , b:1 , c:4}, {a:3 , b:4 , c:5}], atrs = ['a', 'b', 'c', 'd'];document.write("原对象数组:<br>");printObjectArray(arr);document.write("<br>");for(var i = 0, il = atrs.length; i < il; i++){ document.write("合并属性" + atrs[i] + "后:<br>"); printObjectArray(unionObjectArray(arr, atrs[i])); document.write("<br>");} jquery easy ui tree JS验证邮箱最简单方法求详解 页面打印 为什么在div上使用滚轮的时候页面不滚动? 我想知道怎么用脚本 一次性改变所有的 td 的 style 如果在HTML页面上实现同时接受单击和双击事件?详情见下! 急求!frame信息互传功能!高手请进,在线等待! 问个不知道能不能解决的问题 大家帮我讨论一下javascript和vbscript之间的值是怎么样传递的?来者给分! 不能执行已释放 Script 的代码 怎么解决?? 为什么IE中运行的Javascript获取Flash文件会失败?服务端是Asp.net ie6如何用js获取动态创建的元素
var x=[];
var y=[];
var z=[];
arr = [ {a:1 , b:1 , c:1}, {a:2 , b:1 , c:2}, {a:3 , b:3 , c:3},
{a:1 , b:1 , c:4}, {a:5 , b:5 , c:5}]
for(var i in arr){
for(var j in arr[i]){
if(j=="a"){
x.push(arr[i][j]);
}else if(j=="b"){
y.push(arr[i][j]);
}else{
z.push(arr[i][j]);
}
}
}
var f={};
f.a=x.join(",");
f.b=y.join(",");
f.c=z.join(",");
for(var i in f){
alert(i+":"+f[i]);
}
</script>
最笨的方法
var arr = [
{ a : 1 , b : 1 , c : 1},
{ a : 2 , b : 1 , c : 2},
{ a : 3 , b : 3 , c : 3},
{ a : 1 , b : 1 , c : 4},
{ a : 5 , b : 5 , c : 5}
] , result = {} , temp = {}; for(var i = 0 ; i < arr.length ; ++i){
for(var j in arr[i]){
if(!temp[j]){
temp[j] = {};
result[j] = [];
}
if(!temp[j][arr[i][j]]){
result[j].push(arr[i][j]);
}
temp[j][arr[i][j]] = arr[i][j];
}
}
console.log(result);
var unionObjectArray = function(arr, atr){
var r = [], t = {}, x, y, z;
for(var i = 0, il = arr.length; i < il; i++){
t[arr[i][atr]] = t[arr[i][atr]] || [];
t[arr[i][atr]].push(i)
}
for(var p in t)if(t.hasOwnProperty(p)){
x = {};
for(var i = 0, il = t[p].length; i < il; i++){
z = arr[t[p][i]];
for(var q in z)if(z.hasOwnProperty(q)){
x[q] = null;
}
}
for(var q in x)if(x.hasOwnProperty(q)){
y = {};
for(var i = 0, il = t[p].length; i < il; i++){
z = arr[t[p][i]];
if(z[q] != null) y[z[q]] = 1;
}
for(var s in y)if(y.hasOwnProperty(s)){
if(x[q] == null)x[q] = s;
else{
x[q] = [x[q]];
x[q].push(s)
}
}
}
r.push(x)
}
t = x = y = z = null;
return r;
};
//测试:
var printObjectArray = function(arr){
var buf = [], b;
for(var i = 0, il = arr.length; i < il; i++){
buf.push("{");
b = false;
for(var p in arr[i])if(arr[i].hasOwnProperty(p)){
if(b)buf.push(',');
b = true;
buf.push(p + ":" + (arr[i][p] instanceof Array ? "[" + arr[i][p] + "]" : arr[i][p]))
}
buf.push("}<br>")
}
document.write(buf.join(''));
},
arr = [
{a:1 , b:1 , c:1},
{a:2 , b:1 , c:2},
{a:3 , b:3 , c:3},
{a:1 , b:1 , c:4},
{a:3 , b:4 , c:5}
], atrs = ['a', 'b', 'c', 'd'];document.write("原对象数组:<br>");
printObjectArray(arr);
document.write("<br>");for(var i = 0, il = atrs.length; i < il; i++){
document.write("合并属性" + atrs[i] + "后:<br>");
printObjectArray(unionObjectArray(arr, atrs[i]));
document.write("<br>");
}