Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从oData结果将附加字段推送到javascript数组_Javascript_Arrays_Odata_Sapui5_Metadata - Fatal编程技术网

如何从oData结果将附加字段推送到javascript数组

如何从oData结果将附加字段推送到javascript数组,javascript,arrays,odata,sapui5,metadata,Javascript,Arrays,Odata,Sapui5,Metadata,我有一个javascript中的ramdom数组 var dataModel = []; 我查询了一个ODataURL,我想将结果填入我的dataModel[]数组中。并且,对于每个项目,我想添加额外的字段 odataMod.read( "/", null, [], true, function (oData, oResponse) { var data = oData.results;

我有一个javascript中的ramdom数组

var dataModel = [];
我查询了一个ODataURL,我想将结果填入我的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:


也许我误解了,但我认为您只希望在响应中每个项目推一次。其他推送应替换为设置项目副本上的属性

        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);
        }

也许我误解了,但我想你只需要在回复中对每一项推一次。其他推送应替换为设置项目副本上的属性

        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);
        }

你没有误解,这正是我想要的:)!ThanksNote Object.assign在IE中不可用。此外,我认为不需要该项的副本,因为原始项对象以后将不会使用。@Marc-谢谢。同意更常见的方法是对接收到的对象进行变异,否则将被丢弃。编辑以显示默认方式,在注释中使用我的原始非变异替代方案。您没有误解,这正是我想要的:)!ThanksNote Object.assign在IE中不可用。此外,我认为不需要该项的副本,因为原始项对象以后将不会使用。@Marc-谢谢。同意更常见的方法是对接收到的对象进行变异,否则将被丢弃。编辑以显示默认方式,并在注释中显示我的原始非变异替代方案