使用 angular 遍历 json 数据并填充缺失值
Looping through json data using angular and filling in missing values
所以我在使用来自外部 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 缺失,这也可以更改,例如在某些对象中 value: 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'
}
];
这可能吗?如果可以,请问我该怎么做?
提前致谢
好吧,我现在终于解决了这个问题,抱歉最初没有完全理解你想要的是什么,但这是它的 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;
}
我创建了一个 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;
}
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);
获取最后一个对象值如
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})
}
}
所以我在使用来自外部 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 缺失,这也可以更改,例如在某些对象中 value: 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'
}
];
这可能吗?如果可以,请问我该怎么做?
提前致谢
好吧,我现在终于解决了这个问题,抱歉最初没有完全理解你想要的是什么,但这是它的 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;
}
我创建了一个 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;
}
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);
获取最后一个对象值如
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})
}
}