使用指定的键&将一个数组中的值添加到对象指数

时间:2016-03-16 15:08:02

标签: javascript jquery javascript-objects

我使用以下代码,

jQuery.each(aDataSel, function(index, oData) {
        oPushedObject = {};
        aSelectedDataSet.push(fnCreateEnt(aProp, oData, oPushedObject));
    });

这是一个选择的数据集值

enter image description here

这是 OData

的值

enter image description here

我需要的是,在我执行推送之前,请填写listTypeGroup& listTypeGroupDescription(带红色箭头)的值在oData -> ListTypeGroupAssigment -> result(listTypeGroup& listTypeGroupDescription)中,索引是相关的,因为我只想添加值每次迭代中的索引(因为这个代码是在外部循环中调用的,而索引决定了循环的当前步骤),如何才能很好地完成它?

结果包含100个条目(总是),所选数据最后将有100个条目...

更新:)

为了清楚在图片中我展示了为此次运行硬编码的值,但值可以是任何值,我们只需找到两个对象值之间的匹配...

我的意思是找到两个对象中的to_ListTypeGroupAssigment之间的匹配(在这种情况下存在),如果在oData中有更大的结果,那么一个条目以匹配开始...

UPDATE2 - 当我尝试使用Dave代码时,每个条目都会发生以下情况: 这发生在 Jquery.extend 行......任何想法如何克服这个?

enter image description here

以下硬编码 Dave :-) 工作正常但我需要通用代码< strong>不强指特定字段名称

        jQuery.each(aDataSet, function(index, oData) {
            oPushedObject = {};
            fnCreatePushedEntry(aProperties, oData, oPushedObject);
            var result = oData.to_ListTypeGroupAssignment.results[index];
            oPushedObject.to_ListTypeGroupAssignment = {
                ListTypeGroup: result.ListTypeGroup,
                ListTypeGroupDescription: result.ListTypeGroupDescription
            };

            aSelectedDataSet.push(oPushedObject);
        });

我陷入困境:(任何想法如何在这里继续?extend会出现什么问题? 我应该用别的吗?我是jQuery的新手...... :)

我认为这发生了(在Dave回答中),因为oData [key]包含结果而不是指定的键(keyValue = to_ListTypeGroupAssignment),这是正确的但我们需要每个索引的对象结果中的值。

enter image description here

var needValuesForMatch = {
    ListTypeGroup: 'undefined',
    ListTypeGroupDescription: 'undefined',
  }
  //Just to show that oPushedObject can contain additional values just for simulation 
var temp = {
  test: 1
};

//------------------This object to_ListTypeGroupAssigment should be filled (in generic way :) ------
var oPushedObject = {
  temp: temp,
  to_ListTypeGroupAssignment: needValuesForMatch
};

oPushedObject是aSelectedDataSet中的一个实例

在匹配之后我需要做以下几点:

aSelectedDataSet.push(oPushedObject);

2 个答案:

答案 0 :(得分:1)

如果我正确理解你,这应该是一个小小的改变:

jQuery.each(aDataSel, function(index, oData) {
  oPushedObject = {};
  fnCreateEnt(aProp, oData, oPushObj);

  //get all the properties of oData and clone into matching properties of oPushObj
  Object.getOwnPropertyNames(oData).forEach(function(key) {
    if (oPushObj.hasOwnProperty(key)) {
      //oPushObj has a matching property, start creating destination object
      oPushObj[key] = {};
      var source = oData[key];
      var destination = oPushObj[key];

      //can safely assume we are copying an object. iterate through source properties
      Object.getOwnPropertyNames(source).forEach(function(sourceKey) {
        var sourceItem = source[sourceKey];

        //handle property differently for arrays
        if (Array.isArray(sourceItem)) {
          //just copy the array item from the appropriate index
          destination[sourceKey] = sourceItem.slice(index, index + 1);
        } else {
          //use jQuery to make a full clone of sourceItem
          destination[sourceKey] = $.extend(true, {}, sourceItem);
        }

      });
    }
  });

  aSelectedDataSet.push(oPushedObject);
});

目前还不清楚你的fnCreateEnt()函数究竟返回了什么。我假设它是填充的oPushObj,但你的问题并不完全清楚。

答案 1 :(得分:1)

这是你之后的事情:

选项一 - 从oData到aSelectedDataSet的深度克隆

    aSelectedDataSet.forEach(function(currentObject,index){

     for (var childObject in currentObject) {
          if (! currentObject.hasOwnProperty(childObject))
            continue;

          if(typeof currentObject[childObject] !== 'object')
            continue;

          for(var grandChildObject in currentObject[childObject]) {

               var objectToClone = oData[childObject]['results'][index][grandChildObject];

                if(typeof objectToClone === 'object') {
                        $.extend(true,currentObject[childObject][grandChildObject],objectToClone);
                } else {
                        currentObject[childObject][grandChildObject] = objectToClone;
                }
          }
     }

以下是您应用函数的小数据:https://jsfiddle.net/hyz0s5fe/

OPTION TWO - 来自oData的深度克隆仅在aSelectedDataSet中存在属性

$char

选项2的小提琴:https://jsfiddle.net/4rh6tt25/