让我们假设我有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