[英]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.