价值验证

时间:2016-05-23 15:29:37

标签: javascript

数据:

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

3 个答案:

答案 0 :(得分:2)

如果item有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);

答案 1 :(得分:1)

如果您有有效的假值,您可以使用in运算符。

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

答案 2 :(得分: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
    }

然后是我的其余代码。这非常有效,特别是在深入研究它的逻辑之后。