数组累加的算法问题

coloneltao 发布于 02/15 13:43
阅读 115
收藏 0

原arr =[{name:a,value:1},{name:b,value:1},{name:a,value:1}]

经过算法结果为
arr =[{name:a,value:2},{name:b,value:1}]

加载中
0
tcxu
tcxu

方法 1:

  1. 将楼主的数组,看成是 Person 类 的对象数组。
  2. 用js定义类 Person, 以及它的两个属性 name 和 value,以及它的构造方法和成员方法 toString()。
  3. 创建一个 Person 类 的对象数组 p。输出数组 p。
  4. 将属性 name 的值相同的对象挑出来,将它们属性 value 的值累加起来,进而以 对应的 属性 name 的值,以及 value 的累加值,创建一个新实体(对象),然后,将这个新的实体,添加到 Person 类 的对象数组 result之中。
  5. 最终,输出数组 result。 

<html>
<meta charset="utf-8">
<body>
<body>
<script>
var Person = function ( name, value) { //构造方法
  this.name=name;
  this.value=value;
};

Person.prototype.toString = function(){ // 成员方法
  return "{ name: " + this.name + ", " + "value: " + this.value + "}";
};

p=new Array(new Person("a",1),new Person("b",1), new Person( "a",1));
outputArray( "原来", p);
	
// 将属性 name 的各种值,去掉重复的值之后, 保存到数组 arr 之中。
arr = new Array();
for (i=0;i<p.length;i++)
	if ( arr.indexOf(p[i].name) == -1)
		arr.push( p[i].name );
		
result = new Array();	

for(i=0;i<arr.length;i++){
		v = 0;
   for(j=0;j<p.length;j++){
	if (arr[i] == p[j].name)//属性 name 的 同一个值
		v += p[j].value;	//累加 属性 value 的值
	}
	result.push(new Person(arr[i],v));
	}
	
outputArray("经过累加之后",result);
	
function outputArray(title, p){
	document.write(title + "<br>");
	for (var i=0;i<p.length;i++){
	   document.write(p[i]);
	if (i<p.length-1)
	   document.write(", ");
	else
	   document.write("<br>");
	}
}

</script>
</body>
</html>

方法 2 ( 通过 JSON 的形式):

  1. json与数组的功能一样,但语法不一样。
  2. json里面可以存放数字、字符串、数组,或者数组中也可以存放json,也就是说可以把json放在数组里,也可以把数组放在json中,二者搭配可以制做出很复杂的程序模块。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>累加</title>
<body>
<script>
arr =[{name:'a',value:1},{name:'b',value:1},{name:'a',value:1}]
output("原始:",arr); //输出原始数据

field=[]; //保存值不重复的 字段 name 的值 
for (i=0;i<arr.length;i++)
	if (field.indexOf(arr[i].name)==-1)
 		field.push( arr[i].name );

result=[]; //将累加结果,存入 result
for(i=0;i<field.length;i++){
	v=0;
	for (j=0;j<arr.length;j++){
		if (field[i]== arr[j].name){
			v += arr[j].value;
		}
	}
	result.push({ name : field[i], value: v });
}
output("累加后的结果:", result); //输出最终累加结果

function output(title, result){ //定义输出方法
	s = title + "<br>["
	for (i=0;i<result.length;i++){	
	s +=  "{ name: " + result[i].name + ", value: " + result[i].value
		if (i<result.length-1)
			s += " },<br> ";
		else
			s += "}]<br>"
		}
	document.write(s);
	}	
</script>

</body>
</html>

 

tcxu
tcxu
回复 @coloneltao : 不谢。 两种途径比较,走 JSON 的途径更简便。
c
coloneltao
谢谢啦
返回顶部
顶部