Допустим, у меня есть 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
не изменяется.
UPDATE: Добавлен пример, где списки определяется динамически
// 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. JavaScript: создать массив на основе массива объектов
- 3. Массив объектов на основе двух вычислений массива объектов в Javascript
- 4. JavaScript: скомпилировать массив объектов на основе другого массива объектов
- 5. Разделить объект на массив объектов на основе условия в JavaScript
- 6. Javascript - сортировать Javascript массив объектов на основе значения
- 7. Массив JavaScript на основе индекса
- 8. Создайте новый массив объектов, группируя массив объектов на основе значения свойства каждого объекта в javascript
- 9. Разбить массив на массив массивов на основе свойства элемента
- 10. Extract массив объектов на основе их содержания
- 11. Добавление элемента в массив объектов
- 12. Merge массив объектов Javascript на основе ключа собственности (многоуровневого)
- 13. JavaScript фильтр массив объектов на основе значений свойств
- 14. поиск массив объектов в JavaScript
- 15. Javascript слияния массивов на основе общего элемента
- 16. Определить массив объектов на основе мангустов схему
- 17. как фильтровать массив объектов на основе timestamp
- 18. Создать массив объектов на основе ключей объекта
- 19. Отсортировать массив на основе длины каждого элемента
- 20. Perl: переопределить массив на основе значения элемента
- 21. Как определить массив на основе объектов в TypeScript?
- 22. Нажатие элемента на массив в javascript
- 23. Javascript, массив объектов?
- 24. Display массив JavaScript объектов
- 25. Javascript массив строки преобразуется в массив объектов
- 26. Выражение Javascript: массив объектов;
- 27. Сортировка Javascript массив объектов
- 28. Javascript массив объектов
- 29. Изменения в массив JSON объектов на основе другого массива
- 30. Добавление элемента в массив объектов в C++
@ MaazKhan47 у вас есть объект JSON? который вы хотите сохранить в массиве? –
@BunkerBoy Да Json Objects – MaazKhan47