Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RxJS筛选对象的对象_Javascript_Angular_Rxjs - Fatal编程技术网

Javascript 使用RxJS筛选对象的对象

Javascript 使用RxJS筛选对象的对象,javascript,angular,rxjs,Javascript,Angular,Rxjs,我有以下流,我只想过滤并保留为true(布尔)的参数。 { “颜色”:{ “红色”:“, “黄色”:没错, “绿色”:错误 }, “尺寸”:{ “t5”:正确, “t10”:“, “t20”:正确 } } 我需要输出如下所示: { “颜色”:[“黄色”], “尺寸”:[“t5,t20”] } 以下是我在处理这个问题时的想法: 我试着用地图,但没有成功。我想这是因为它是一个 对象而不是数组 此对象中的所有键和值都是动态的,因此我无法使用它们来 操纵对象 flatMap()帮了我一点忙,但我不

我有以下流,我只想过滤并保留为true(布尔)的参数。

{
“颜色”:{
“红色”:“,
“黄色”:没错,
“绿色”:错误
},
“尺寸”:{
“t5”:正确,
“t10”:“,
“t20”:正确
}
}
我需要输出如下所示:

{
“颜色”:[“黄色”],
“尺寸”:[“t5,t20”]
}
以下是我在处理这个问题时的想法:

  • 我试着用地图,但没有成功。我想这是因为它是一个 对象而不是数组
  • 此对象中的所有键和值都是动态的,因此我无法使用它们来 操纵对象
  • flatMap()帮了我一点忙,但我不知道怎么处理它,因为我 我不知道钥匙的名字
this.form.valueChanges
.debounceTime(400)
.flatMap(x=>Object.values(x))
.subscribe(console.log)

这不是rxjs问题,只是一个简单的js映射:

getTruthyKeys(obj: any): Array<string> {
   return Object.keys(obj).filter(key => obj[key] === true);
}

mainKeysToTruthyLists(obj: any): Array<{key: string, truthy: Array<string>}> {
  let result = {};
  Object.keys(obj).forEach(key => result[key] = getTruthyKeys(obj[key]);
  return result;
}

这不是rxjs问题,只是简单的js映射:

getTruthyKeys(obj: any): Array<string> {
   return Object.keys(obj).filter(key => obj[key] === true);
}

mainKeysToTruthyLists(obj: any): Array<{key: string, truthy: Array<string>}> {
  let result = {};
  Object.keys(obj).forEach(key => result[key] = getTruthyKeys(obj[key]);
  return result;
}

这不是一个真正的RxJS问题。RxJS在这里应该做的就是
map
。这可以通过
对象完成。条目

this.form.valueChanges
.debounceTime(400)
.map(obj => {
  return Object.entries(obj)
  .reduce((newObj, [key, subObj]) => {
    const subArr = Object.entries(subObj)
    .filter(([, subValue]) => subValue)
    .map(([subKey]) => subKey);

    return Object.assign(newObj, { [key]: subArr });
  }, {})
})

这不是一个真正的RxJS问题。RxJS在这里应该做的就是
map
。这可以通过
对象完成。条目

this.form.valueChanges
.debounceTime(400)
.map(obj => {
  return Object.entries(obj)
  .reduce((newObj, [key, subObj]) => {
    const subArr = Object.entries(subObj)
    .filter(([, subValue]) => subValue)
    .map(([subKey]) => subKey);

    return Object.assign(newObj, { [key]: subArr });
  }, {})
})

在我在mainkystruthylists函数中添加了一个return之后,它就工作了。我还添加了一个连接(“,”)。我喜欢你的风格。这真的很有帮助。谢谢。在我在mainkystruthylists函数中添加了一个return之后,它就工作了。我还添加了一个连接(“,”)。我喜欢你的风格。这真的很有帮助。非常感谢。