【问题标题】:Javascript filtering string and boolean array object and duplicate valuesJavascript过滤字符串和布尔数组对象和重复值
【发布时间】:2020-10-01 22:48:02
【问题描述】:

可以说,我有如下的对象数组,

data = [{ name: 'A', place: 'chennai', placeChecked:true}
{ name: 'A', place: 'America', placeChecked:true}
{ name: 'A', place: 'America', placeChecked:true}
{ name: 'A', place: 'Delhi', placeChecked:false}
{ name: 'B', place: 'Delhi', placeChecked:false}
{ name: 'B', place: 'Delhi', placeChecked:false}
{ name: 'B', place: 'Canada', placeChecked:true}]

我想过滤列并希望输出如下所示

"name":{"A","B"}
"place":{"Chennai","America","Delhi","Canada"}
"placeChecked":{true,true,false,true}

使用 Object.keys 我可以获取密钥

Object.keys(data[0]).forEach((ele: string) => this.map.set(ele, new Set())); 

但无法为相应的键分配布尔值。

data.forEach(keys => {
  for (const key in keys) {
    this.map.get(key).add(keys[key]);
   }
})

【问题讨论】:

  • "name":{"A","B"}"name":{"A","A","B","B"} ?
  • 为什么placeChecked中有重复项?
  • 来自服务器端的重复值。所以需要处理这些数据。名称应该类似于 "name" : {"A","B"}
  • @Sapthika 所以这里placechecked 的值将是倍数,而不仅仅是4 values(如您的预期输出所示),唯一值将只有nameplace,对吗?
  • @gorak placeChecked 值应仅为 4 个值,如预期输出所示。

标签: javascript arrays object boolean


【解决方案1】:

您可以使用reduce 执行此操作。我希望这将引导您走向更远的方向。

var data = [{ name: 'A', place: 'chennai', placeChecked:true},{ name: 'A', place: 'America', placeChecked:true},{ name: 'A', place: 'America', placeChecked:true},{ name: 'A', place: 'Delhi', placeChecked:false},{ name: 'B', place: 'Delhi', placeChecked:false},{ name: 'B', place: 'Delhi', placeChecked:false},{ name: 'B', place: 'Canada', placeChecked:true}];

var result = data.reduce((acc,elem)=>{
  Object.entries(elem).forEach(([k,v])=>{
    acc[k] = [...(acc[k] || []),v];
    acc[k] = [...new Set(acc[k])];
  });
  return acc;
},{});

result.placeChecked = result.place.map(k=>data.find(p=>p.place==k).placeChecked);

console.log(result);

【讨论】:

  • @Sapthika 我已经编辑了答案,看看,让我知道。
  • 没有硬编码result.placeChecked和result.place还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多