SAPUI5 Javascript-为每个唯一属性获取数组的第一个和最后一个元素

时间:2018-11-09 11:36:28

标签: javascript underscore.js sapui5

SAPUI5-我有一个对象数组,其中的一个属性是“类别”。

例如,说我有两种不同类型的类别,“前店”和“生产区域”,我需要做的是能够获取每个类别的第一个值和每个类别的最后一个值,然后进行设置按钮的启用属性为启用/禁用。

我目前正在使用下划线js(_.each)循环执行其他逻辑,因此可以在此处包括其他逻辑。

不确定Underscore是否为此具有内置功能? 还是有人可以向我指出正确的方法?

我已经获得了想要获得的第一个结果和最后一个结果的第一遍,但是现在需要为每个唯一的类别进行设置。

enter image description here

下面的示例代码:

// Set view data
                oViewData.Questions = oQuestions.results;
                oViewData.Questions.TotalNumberOfQuestions = oQuestions.results.length;

                // Loop Questions, to get Category Desc and Competency Desc values from relevant Sets
                _.each(oViewData.Questions, function (result, index) {

                    // Read and set Category Desc
                    this.getView().getModel("Survey").read("/CategorySet", {
                        filters: [new Filter("CategoryId", FilterOperator.EQ, result.CategoryId)],
                        success: function (oData) {
                            oViewData.Questions[index]._CategoryDesc = oData.results[0].CategoryDesc;
                            this.setViewData(oViewData);
                        }.bind(this),
                        error: function (oError) {}.bind(this)
                    });

                    // Read and set Competency Desc
                    this.getView().getModel("Survey").read("/CompetencySet", {
                        filters: [new Filter("CompetencyId", FilterOperator.EQ, result.CompetencyId)],
                        success: function (oData) {
                            oViewData.Questions[index]._CompetencyDesc = oData.results[0].CompetencyDesc;
                            this.setViewData(oViewData);
                        }.bind(this),
                        error: function (oError) {}.bind(this)
                    });

                    // Set all move up / down buttons to enabled
                    oViewData.Questions[index]._MoveUpBtn = true;
                    oViewData.Questions[index]._MoveDownBtn = true;

                    // if category id is the first one in the list 



                }.bind(this));

                // Overwrite first move up button and last move down btn to disabled
                oViewData.Questions[0]._MoveUpBtn = false;
                oViewData.Questions.slice(-1)[0]._MoveDownBtn = false;

                // Set view data
                this.setViewData(oViewData);

1 个答案:

答案 0 :(得分:0)

首先,您可以使用本机JavaScript遍历数组。

_.each(array, function(item) {})array.forEach(function(item) {})相同。

第二,您可以针对实际问题使用内置的filter函数:

const aFrontShopItems = oViewData.Questions.filter(function(oItem) {
    return oItem.Category === "Front Shop";
}

如果oViewData.Questions是一个数组,则传递给filter的函数将应用于每个元素。如果条件(例如oItem.Category === "Front Shop")为true,则将该元素添加到新数组aFrontShopItems中。显然,您需要再次调用filter来获取生产区域项目。然后,您可以将逻辑应用于新数组的第一和最后一项。