Циклический просмотр данных JSON с использованием угловых значений и заполнение пропущенных значений

0

Поэтому у меня есть эта проблема, когда я заполняю диапазон ввода, используя данные, поступающие из внешнего 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 и значение: 7 отсутствуют, это тоже может измениться, в некоторых объектах значение: 11 и значение: 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'
  }
];

Возможно ли это, и если да, то каким образом я бы об этом подумал?

заранее спасибо

  • 0
    У вашего значения будет инкремент? (1,2,3,4,5,6)
  • 0
    Таким образом, массив увеличивается, но у него могут отсутствовать значения, и я хочу создать новый объект, в котором все значения будут увеличены, а те, которые отсутствовали ранее, должны быть в основном заполнены, а текст - дублировать предыдущий, так что
Теги:
loops

4 ответа

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/

  • 0
    Извините, нет, это не помогло, спасибо за помощь
  • 0
    изменить ответ. пожалуйста, отошлите это
Показать ещё 4 комментария
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})

    }

}
  • 0
    Извините, нет, это не помогло, спасибо за помощь
  • 0
    Мне нравится ваше решение человек!
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;
}
  • 0
    Извините, нет, это не помогло, спасибо за помощь
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 always missed
  newObject.push($scope.someObj[$scope.someObj.length - 1])

  $scope.someObj = newObject;
}
  • 0
    Это то, что я ищу, но в данных последнее значение равно 11, поэтому, когда вы нажимаете кнопку push me, должен быть новый объект со всеми 11 шагами и отсутствующими, заполненными, но этот пример, кажется, сохраняет количество шаги это имеет и переупорядочивает значения.
  • 0
    букке хари прасад - гораздо лучшее решение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню