簡體   English   中英

在JavaScript中按鍵將項目添加到數組

[英]Add item to array by key in JavaScript

我需要對具有相同name屬性的項目進行分組,並增加其number 我嘗試分配給新數組,並按鍵檢查已存在的項目。 當我在PHP中使用此解決方案時,它可以正常工作,但在JavaScript中卻不能。

我搜索了一些類似的問題,但是我不知道為什么它不起作用。

 var orgArr = [ {name: 'abc', number: 3}, {name: 'xyz', number: 2}, {name: 'abc', number: 5} ]; var result = []; //work if result = {}; for (var i = 0; i < orgArr.length; i++) { if (!result[orgArr[i].name]) { result[orgArr[i].name] = orgArr[i]; //assign new } else { result[orgArr[i].name].number += orgArr[i].number; //increase number if name exist in result array } } alert(JSON.stringify(result)); //expect array 2 item but it's empty array console.log(result); //Will have result 2 item when I view console window 

 var orgArr = [ {name: 'abc', number: 3}, {name: 'xyz', number: 2}, {name: 'abc', number: 5} ]; var result = []; //work if result = {}; var tempArray = []; // used to store unique name to prevent complex loop orgArr.forEach(function(item){ if($.inArray(item.name, tempArray)< 0){// unique name result.push(item); tempArray.push(item.name); } else{ var indexNew = $.inArray(item.name, tempArray); result[indexNew].number += item.number; } }); alert(JSON.stringify(result)); //expect array 2 item but it's empty array console.log(result); //Will have result 2 item when I view console window 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

E /我以前的回答不正確。

嗯,是...

[]指定一個數組。 數組按整數值保存所有內容。 您正在嘗試為它提供一個字符串值(orgArr [x] .name),並且由於它只是一個數組,因此將其丟棄為錯誤調用。

{}是一個對象。 對象可以具有字符串索引。

var result = []; //work if result = {}; 

為什么結果不能為{}?

如果您希望它起作用,請使result = {}而不是[]

數組不是鍵值存儲。 它仍將采用鍵值,並將其存儲在數組對象上。 但是當stringify遇到您的數組時,它確定它是一個數組,然后嘗試迭代該數組,並且您的數組顯示為空。 這樣您的輸出中什么也不會得到。

您得到空數組是因為默認情況下JSON.stringify無法將您的數組轉換為json字符串。

默認情況下,JSON.stringify將基於int的索引數組轉換為json字符串,但是您使用的是orgArr [i] .name,它是一個字符串,作為數組索引,導致alert()顯示空數組。

您能解釋一下為什么要將json數組轉換為帶有字符串索引的數組嗎? 如果要將字符串作為鍵/索引,最好使用json數組。

有關JSON.stringify的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM