У меня есть массив ramdom в javascript
var dataModel = [];
Я запросил URL-адрес oData и хочу заполнить результат в своем массиве dataModel []. И для каждого элемента я хочу добавить дополнительные поля
odataMod.read(
"/",
null, [],
true,
function (oData, oResponse) {
var data = oData.results;
data.forEach(function (item) {
//Add the object
dataModel.push(item);
//I want to add additional fields to every object in data
dataModel.push(item.ObjectType = "Chevron");
dataModel.push(item.HierarchyNodeLevel = 0);
dataModel.push(item.IsCriticalPath = false);
dataModel.push(item.IsProjectMilestone = false);
dataModel.push(item.DrillDownState = "expanded");
dataModel.push(item.Magnitude = 5);
...
Примечание. ObjectType , DrillDownState , Magnitude (и т. д.) — это поля, которые я хочу добавить со своими значениями Chevron, 0, false (и т. д.).
Ниже приведен скриншот текущего результата:
Но я хочу добавить дополнительные свойства внутри каждого элемента, а не снаружи, что я делаю неправильно? Другими словами, я хочу, чтобы дополнительные поля были внутри метаданных.
Ниже приведен sc, где я хотел бы добавить элементы:



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Может быть, я неправильно понимаю, но я думаю, что вам нужно только одно нажатие на элемент в ответе. Другие нажатия следует заменить установкой свойств копии элемента...
data.forEach(function (item) {
item.ObjectType = "Chevron";
item.HierarchyNodeLevel = 0;
item.IsCriticalPath = false;
item.IsProjectMilestone = false;
item.DrillDownState = "expanded";
item.Magnitude = 5;
dataModel.push(item); // note: just one push
// alternatively, so as to not mutate item...
// const dataModelItem = Object.assign({
// ObjectType: "Chevron",
// HierarchyNodeLevel: 0,
// etc.
// }, item);
// dataModel.push(dataModelItem);
}
Обратите внимание, что Object.assign недоступен в IE. Также я не думаю, что копия элемента необходима, поскольку исходный объект элемента впоследствии не будет использоваться.
@Марк - спасибо. согласитесь, что более распространенным подходом является изменение полученного объекта, который в противном случае был бы отброшен. Отредактировано, чтобы показать этот способ по умолчанию, с моей исходной немутирующей альтернативой в комментариях.
Вы не ошиблись, это именно то, что я искал :) ! Спасибо