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:求和到数组的主要内容,如果未能解决你的问题,请参考以下文章

5.24 javascrip累加求和练习

好程序员分享JavaScrip数组去重操作实例小结

使用 Javascript 使用 for 循环对数组中的数字求和 [重复]

JavaScrip和Java一样吗?

javascript es6 多维数组对象相同属性值{key:value}的求和

javascript es6 多维数组对象相同属性值{key:value}的求和