2015-04-28 39 views
-7

我的功能是:的Javascript:和成陣列

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" ] 

感謝您的幫助!

+5

那你試試這麼遠嗎?向我們展示一些代碼。 – doldt

+0

那麼,總結數組的方法是用字符串'「Apple:10」,「Apple:3」'替換字符串'「Apple:10」,「Apple:3」'。 –

+3

你有重複的ID嗎?修復這個! –

回答

1

下面是一個對象的版本。這並不是你真正想要的,但是按照相同的方式,誠實地說,它是一個整潔的數據結構。

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));

而且,正如在評論中說,當我們看:

myArray .push($(this).attr('id') + " : " +$(this).val()); 

而且

myArray [ "Apple: 10", "Apple: 3", "Banana: 3", "Pear: 7", "Pineapple: 7" ] 

你似乎有重複的ID在文檔中由於ID在任何給定的操作中必須是唯一的,因此需要首先對其進行修復cument。

+0

謝謝你!沒關係 ! –

-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>

+0

向下選民想評論? –

+2

它甚至沒有做提問者想要做的事 –

+0

OP想要數組中的值的總和,現在OP已經改變了代碼。 –

-2

先前的答案是錯誤的。 我有固定的,對不起

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); 
+1

您是否認爲這將返回OP請求的內容? –

+0

@dystroy我修好了。我的錯 – vasilenicusor

0

使用正則表達式來拆分數組元素的將它們添加到一個臨時對象:

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