给定一个数组:
var arrOfObj = [{
name: 'eve',
col1 : 1,
col2 : 0,
col3 : 1
}, {
name: 'john',
col1 : 1,
col2 : 1,
col3 : 0
}, {
name: 'jane',
col1 : 0,
col2 : 1,
col3 : 1
}];
如果它们的值为1,我需要在数组中有一个字段,其字符串名称为col1、col2、col3的名称。样本结果如下:
var arrOfObj = [{
name: 'eve',
col1 : 1,
col2 : 0,
col3 : 1,
account : "col1,col3"
} //etc
}]
我目前可以通过以下方式实现这一点:
var result = arrOfObj.map(function(o) {
o.account = ""
if (o.col1 > 0) {o.account = o.account + "col1,"} ;
if (o.col2 > 0) {o.account= o.account + "col2,"} ;
if (o.col3 > 0) {o.account= o.account + "col3,"} ;
o.account = o.account.slice(0, -1);
return o;
})
console.log(result)
但是对于 JS 新手来说,这种方法感觉不够高效。我的实际数组有十几个这样的列需要进行评估。
编辑:在接受的答案的帮助下完成了最终产品:
var bool_cols = ["col1","col2","col3"]
data.forEach(x => {
x.services = Object.keys(x).filter (y => bool_cols.includes(x) && x[y] == 1).join (',');
})
我喜欢能够无限扩展过滤条件的功能!
filter(y => x[y] == 1 && y.contains("col"))
。 - flappix