Javascript:求和到数组
Posted
技术标签:
【中文标题】Javascript:求和到数组【英文标题】:Javascript : Sum into array 【发布时间】:2015-07-07 07:34:04 【问题描述】:我的功能是:
var myArray = new Array();
$('input:checked').each(function(index)
myArray .push($(this).attr('id') + " : " +$(this).val());
);
让我知道如何在这个数组中求和:
myArray [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ]
我的结果 >
myNewArray [ "Apple: 13", "Banana: 3", "Pear: 7", "Pineapple: 7" ]
感谢您的帮助!
【问题讨论】:
到目前为止你尝试了什么?给我们看一些代码。 嗯,对数组求和的一种方法是将字符串"Apple: 10", "Apple: 3"
替换为字符串 "Apple: 10", "Apple: 3"
。
你有重复的ID吗???解决这个问题!
您需要查看用于存储数据的 JS 对象的类型。数组在这里真的不合适。对象会好很多。 (换句话说,@Masiorama 所说的)。
我投票决定将此问题作为离题结束,因为它是一个 XY 问题,来自不应该存在的情况(重复 ID)。
【参考方案1】:
试试这样的。
var data = [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ];
var newObject = ;
var sum = 0;
$.each(data,function(k,v)
var key = v.split(":")[0];
var value = v.split(":")[1];
if((key in newObject))
newObject[key] = parseInt(newObject[key]) + parseInt(value);
else
newObject[key] = $.trim(value);
);
console.log(newObject);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
【讨论】:
它甚至不做提问者想要它做的事情 OP 想要数组中值的总和,现在 OP 有更改代码。 该示例自第一次修订以来就存在 调用对象newArray
有点混乱
@JanDvorak,现在可以了吗?【参考方案2】:
这是一个对象版本。这并不是你真正想要的,但实际上是一样的,老实说,因为它是一种数据结构,所以更简洁一些。
var myArray = [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ];
var newArray = ;
myArray.forEach(function(val)
var item = val.split(":");
var key = item[0];
var num = parseInt(item[1], 10);
if ( newArray.hasOwnProperty(key) )
newArray[key] += num;
else
newArray[key] = num;
);
alert ( JSON.stringify(newArray) );
而且,正如 cmets 中所说,当我们查看时:
myArray .push($(this).attr('id') + " : " +$(this).val());
和
myArray [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ]
您的文档中似乎有重复的 ID,需要首先修复,因为 ID 在任何给定文档中都必须是唯一的。
【讨论】:
【参考方案3】:之前的答案是错误的。 我已经修好了,对不起
var myArray = [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ],
newArray= ,
i,
temp;
for (i=0; i<myArray.length;i++)
temp = myArray[i].split(':');
temp[0] = temp[0].replace( /\s/g, "");
temp[1] = temp[1].replace( /\s/g, "");
if(newArray[temp[0]])
newArray[temp[0]] = newArray[temp[0]] + parseInt(temp[1]);
else
newArray[temp[0]] = parseInt(temp[1]);
console.log(newArray);
【讨论】:
你认为这会返回 OP 的要求吗? @dystroy 我已修复。我的错误【参考方案4】:使用正则表达式拆分数组元素并将它们添加到临时对象:
var regex = /([A-Za-z]+): (\d+)/
var obj = ;
for (var i = 0, l = arr.length; i < l; i++)
var match = arr[i].match(regex);
var name = match[1];
var value = match[2];
if (!obj[name]) obj[name] = 0;
obj[name] += +value;
这会给你一个看起来像这样的对象:
console.log(obj) // Apple: 13, Banana: 3, Pear: 7, Pineapple: 7
就我个人而言,我会这样保留它,因为对象真的很容易操作。
但是,如果您真的需要再次将数据返回到数组中,只需遍历对象并将字符串作为元素推送到数组中:
var out = [];
for (var p in obj)
out.push(p + ': ' + obj[p]);
console.log(out) // [ "Apple: 13", "Banana: 3", "Pear: 7", "Pineapple: 7" ]
DEMO
【讨论】:
以上是关于Javascript:求和到数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 使用 for 循环对数组中的数字求和 [重复]