2016-05-23 34 views
4

数据:值验证

var dataArr = [ 
    {id: 123, str:"Alexey Ayzin", bg:"#FFFFFF"}, 
    {id: 234, str:"Mira Mdivani"}, 
    {id: 345, str:"Maria Iliakova"}, 
    {id: 456, str:"Dennis Ayzin"} 
]; 

正如你可以看到,BG:“FFFFFF”存在于一个子集,而不是其他。我该如何改变这一点:

for (var i = 0; i < datalength; i++) { 
    if(dataArr[i].bg === "undefined"){ 
     data[i].bg = stringToColour(dataArr[i].str); 
    } 
} 

因此,它检查每个子集的BG的存在,如果它不存在,填写一个。 JSFiddle

+1

删除引号:'dataArr [i] .bg === undefined' – Tushar

回答

1

你可以使用in运营商,如果你有falsy值,它是有效的。

if (!('bg' in dataArr[i])) { 
    // set dataArr[i].bg 
} 
2

如果项目有BG,什么也不做,否则 - 设置新的BG

var dataArr = [ 
    {id: 123, str:"Alexey Ayzin", bg:"#FFFFFF"}, 
    {id: 234, str:"Mira Mdivani"}, 
    {id: 345, str:"Maria Iliakova"}, 
    {id: 456, str:"Dennis Ayzin"} 
]; 
dataArr.forEach(function (item){ 
    item.bg = item.bg || '#FFFFFF'; 
}); 

function assignColor(arr, prop, color){ 
    arr.forEach(function (item){ 
     item[prop]= item[prop] || color; 
    }); 
} 

// usage 
assignColor(dataArr, 'bg', '#FFFFFF'); // <== or any other color 

// UPDATE 
//---------------------------- 

// get first value of color from array and assign to other 
var item = dataArr.find(function(item){ // this will find first item which has defined color 
    return !!item.bg; 
}); 
assignColor(dataArr, 'bg', item.bg); 
+0

它可能是任何东西,不只是FFFFF。我可以使用正则表达式吗? –

+0

你是什么意思,我想你想分配不同的值而不是#FFFFFF? –

+0

是的。这将是非常随机的数据,只有str和id有保证。颜色可以存在或不存在,可以是任何颜色。 @medettleukabiluly –

0

我最终什么事做了以下内容:

for(var elem in payload.data){ 
    var isPresent = 0; 
    for(var key in payload.data[elem]){ 
     if(key == "bG"){ 
      //change boolean if bG is present 
      isPresent = 1; 
     } 
    } 
    if(!isPresent){ 
     bGHex = stringToColour(payload.data[elem].str); 
     payload.data[elem].bG = bGHex 
    } 

,然后我的代码的其余部分。这个工作非常好,特别是在深入研究它的逻辑之后。