首页 > 解决方案 > 根据其他数组值将字符串映射到数组的最佳方法

问题描述

给定一个数组:

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 (',');
    })

我喜欢如何无限期地扩展过滤条件!

标签: javascriptarrays

解决方案


怎么样

arrOfObj.forEach ( (x) => {
    x.account = Object.keys(x).filter (y => x[y] == 1).join (',');
})

推荐阅读