数据:
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
答案 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
}
然后是我的其余代码。这非常有效,特别是在深入研究它的逻辑之后。