使用角度和填充缺失值循环json数据

时间:2015-09-23 09:18:52

标签: javascript json angularjs loops duplicate-data

所以我有这个问题,我使用来自外部json文件的数据填充范围输入...

所以基本上数据有一堆对象,每个对象都有一个值和文本数组。但是有些对象没有连续的值来循环,并在范围滑块上输出如下:

var someObj = [
  {
    value: 1,
    text: 'A'
  },
  {
    value: 2,
    text: 'B'
  },
  {
    value: 3,
    text: 'C'
  },
  {
    vaule: 5,
    text: 'D'
  },
  {
    value: 6,
    text: 'E'
  },
  {
    vaule: 8,
    text: 'F'
  }
];

请注意,Value:4和value:7缺失,这也可能会改变,在某些对象中:11和value:13也会丢失。例如。

所以基本上我需要实现的是遍历每个对象,如果缺少值来添加值并从之前的值复制文本值,例如......

var someObj = [
  {
    value: 1,
    text: 'A'
  },
  {
    value: 2,
    text: 'B'
  },
  {
    value: 3,
    text: 'C'
  },
  {
    vaule: 5,
    text: 'D'
  },
  {
    value: 6,
    text: 'E'
  },
  {
    vaule: 8,
    text: 'F'
  }
];

会变成

var someObj = [
  {
    value: 1,
    text: 'A'
  },
  {
    value: 2,
    text: 'B'
  },
  {
    value: 3,
    text: 'C'
  },
  {
    value: 4,
    text: 'C'
  },
  {
    vaule: 5,
    text: 'D'
  },
  {
    value: 6,
    text: 'E'
  },
  {
    vaule: 7,
    text: 'E'
  },
  {
    vaule: 8,
    text: 'F'
  }
];

这是可能的吗?如果可以的话,我该怎么做呢?

提前致谢

4 个答案:

答案 0 :(得分:2)

var i=0;
do{
if(someObj[i].value!=i+1){
    var obj = {}
    debugger;
    obj['value']= i+1;
    obj['text']= someObj[i-1].text;
    someObj.splice(i,0,obj);
}
i++;

}while(i<someObj.length);

参考这个:https://jsfiddle.net/cw5kkpgu/

答案 1 :(得分:1)

获取最后一个对象值,如

var someObjLength = someObj[someObj.length-1].value;

for(i = 0; i < someObjLength-1; i++) {

    if(someObj[i].value != (i+1)){

        someObj.splice(i, 0, {value: i+1, text: someObj[i-1].text})

    }

}

答案 2 :(得分:0)

好的,我现在终于解决了这个问题,抱歉没有完全理解你的目标,但是这里是Plunker:

http://plnkr.co/edit/n1tSfj2YJMeBZNZCSAF3?p=preview

请确认是否:)

它的关键是:

$scope.loop = function(){
  var previousText = '';
  var previousValue = '';
  var newObject = [];

  angular.forEach($scope.someObj, function(object){

    if(object.value == 1){
      newObject.push(object);
      previousText = object.text;
      previousValue = object.value;
      console.log("value:" + previousValue + " | Text:" + previousText);
    }
    else {
      if(object.value != (previousValue + 1)){
        while (object.value != (previousValue + 1)){
            previousValue += 1;
            newObject.push({ value: previousValue, text: previousText})

            console.log("value:" + previousValue + " | Text:" + previousText);
        }
      }
      else{
            newObject.push(object);
            previousValue = object.value;

            console.log("value:" + previousValue + " | Text:" + previousText);
      }

      previousText = object.text;
    }

  });

  // Add the last value as it's always missed
  newObject.push($scope.someObj[$scope.someObj.length - 1])

  $scope.someObj = newObject;
}

答案 3 :(得分:0)

我创建了一个js函数来完成缺少的对象。 如果有效,请告诉我。

function completeObject(someObj)
{
    var otherObj = [];
    for(var obj in someObj)
    {
      otherObj[someObj[obj]['value']] = someObj[obj];
    }

    var j = 0;
    for(var i =1 ; i <= someObj[someObj.length-1]['value'];i++)
    {
      if(otherObj[i] === undefined)
      {
        var obj = {}
        obj['value']= i;
        obj['text']= otherObj[j]['text'];
        otherObj.push(obj);
      }
      else
      {
        j = i ;
      }
    }

    return otherObj;
}