讓我們假設我有1000個對象。現在,我想將具有相同名稱的對象存儲在數組中,以便讓多個數組具有相同名稱的對象。這怎麼能在JavaScript中完成? 數據可以是這樣的基於元素的Javascript中的對象陣列
回答
var input = [
{ name: 'ABC', age: 12 },
{ name: 'XYZ', age: 13 },
{ name: 'ABC', age: 14 },
{ name: 'XYZ', age: 15 },
];
var output = {};
input.forEach(function(obj) {
var array = output[obj.name];
if (!array) {
array = output[obj.name] = [];
}
array.push(obj)
})
for(name in output) {
console.log('There are ' + output[name].length + ' people named ' + name);
}
(你可以將你的代碼轉換爲片段嗎?) – evolutionxbox
對你而言,任何東西:) –
在JavaScript中,對象不被複制到陣列。它們存在於內存中,當添加到數組中時,該對象的引用就是數組中的內容。
在以下代碼中,myObj === arr1[0] === arr2
。這意味着符合下列條件:
var myObj = {name:'Dave', age: 55};
var arr1 = [myObj];
var arr2 = [myObj];
arr2[0].age = 44;
console.log(myObj.age);
// prints 44
console.log(arr1[0].age);
// prints 44
因此,要獲得你需要什麼,你只需要您的數據組織成陣列。在JavaScript中,可以過濾數組:
// original data
var data = [
{name: 'ABC', age: 12},
{name: 'XYZ', age: 13},
{name: 'ABC', age: 14},
{name: 'XYZ', age: 15},
{name: 'XYZ', age: 16},
];
// this returns a function to be used in Array.filter to filter for objects with the specified name
function nameFilter(name) {
return function(datum) {
return datum.name === name;
}
}
// filter for each type
var abcPeople = data.filter(nameFilter('ABC'));
var xyzPeople = data.filter(nameFilter('XYZ'));
console.log(data.length);
//5
console.log(abcPeople.length);
//2
console.log(xyzPeople.length);
//3
如果運行上面的代碼,就必須3個陣列和在abcPeople
所有對象也將是data
,使得任何改變一個會反映在其他。 xyzPeople
也是如此。 要清楚,filter
會創建一個新陣列,因此data
未被修改。
更新:新增例子名單是動態確定
// original data
var data = [
{name: 'ABC', age: 12},
{name: 'XYZ', age: 13},
{name: 'ABC', age: 14},
{name: 'XYZ', age: 15},
{name: 'XYZ', age: 16},
];
var sortedData = {};
data.forEach(function(datum){
// initializes an array for any unseen name
if(!sortedData[datum.name]) {
sortedData[datum.name] = [];
}
// add the datum to the list for its name
sortedData[datum.name].push(datum);
});
// all names
console.log(Object.keys(sortedData));
// "ABC", "XYZ"
// items named "ABC"
console.log(sortedData['ABC']);
// [{"name": "ABC","age": 12}, {"name": "ABC","age": 14}]
那麼這裏的複雜性是我可以有這麼多類型(名稱),那麼我想如何過濾每個類型? – MaazKhan47
如果你有一個名字列表,你可以遍歷它。如果沒有,那麼你可以遍歷原始列表並以這種方式拆分對象。你最終會得到一個數組的對象 – pgreen2
- 1. 創建基於陣列的JavaScript對象
- 2. 陣列對象中的訪問元素
- 3. Zend_Form的 - 基於多陣列元素
- 4. 從基於另一個陣列的陣列中刪除元素
- 5. 陣列對象的方含元素的多個陣列中的「JAVASCRIPT」
- 6. JavaScript:基於不同對象陣列編譯對象數組
- 7. 基於JavaScript中的條件將對象分割爲對象陣列
- 8. 刪除基於陣列元素鍵
- 9. 基於位置獲取基於Javascript元素的元素節點
- 10. 基於陣列的有界緩衝區中的空元素
- 11. 基於angularjs中的過濾器從陣列中刪除元素
- 12. 的javascript:基於對象
- 13. 基於對象屬性類型從列表中提取元素
- 14. JavaScript陣列的JSON對象?
- 15. Javascript:陣列中的移動元素
- 16. 基於位置獲取陣列中的N個元素
- 17. Matlab基於元素的矩陣乘法
- 18. R:基於元素的矩陣分區
- 19. 基於另一個陣列的鍵排列數組元素
- 20. 基於陣列長度的html列表元素
- 21. 更新對象的陣列中的JavaScript
- 22. 包含陣列中的對象的Javascript
- 23. Javascript更新基於子集的對象數組中的特定元素
- 24. 基於序列合併列表中的元素對
- 25. 樣本從陣列元素的基地
- 26. JavaScript給元素鍵陣列
- 27. 的JavaScript轉換對象的陣列中的陣列2D
- 28. 將對象添加到基於單元的NSTableView中的列中?
- 29. 表陣列中的JavaScript對象發現
- 30. 陣列中的Javascript重置對象
@ MaazKhan47你有JSON對象?你想存儲在數組中? –
@BunkerBoy是Json對象 – MaazKhan47