讓我們假設我有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. Zend_Form的 - 基於多陣列元素
- 3. 刪除基於陣列元素鍵
- 4. 基於位置獲取基於Javascript元素的元素節點
- 5. 基於陣列的有界緩衝區中的空元素
- 6. Javascript:陣列中的移動元素
- 7. 基於位置獲取陣列中的N個元素
- 8. R:基於元素的矩陣分區
- 9. Matlab基於元素的矩陣乘法
- 10. 基於另一個陣列的鍵排列數組元素
- 11. 更新對象的陣列中的JavaScript
- 12. 包含陣列中的對象的Javascript
- 13. 樣本從陣列元素的基地
- 14. JavaScript給元素鍵陣列
- 15. 基於序列合併列表中的元素對
- 16. 的JavaScript轉換對象的陣列中的陣列2D
- 17. 表陣列中的JavaScript對象發現
- 18. 設置陣列陣列中的元素
- 19. 陣列中的陣列打印元素
- 20. 包裝JavaScript對象中的DOM元素
- 21. 如何在基於元素的JS中編寫對象
- 22. 如何過濾陣列中的元素相對於另一個陣列?
- 23. 從一個陣列返回元素,基於另一個陣列的值
- 24. PHP基於元素依賴關係的排序陣列
- 25. R - 基於另一個陣列的連接字符串元素
- 26. JavaScript中,排序陣列1基於arry2
- 27. Javascript陣列元素上的操作
- 28. Javascript排序陣列內的元素
- 29. 基於對象的屬性在下拉列表中排序元素
- 30. 通過分組基於第一陣列的元件在Javascript
@ MaazKhan47你有JSON對象?你想存儲在數組中? –
@BunkerBoy是Json對象 – MaazKhan47