Javascript 按关键帧过滤对象,然后将其展平为数组

Javascript 按关键帧过滤对象,然后将其展平为数组,javascript,Javascript,我想通过一个对象的关键点过滤它,然后将其展平到一个数组,因此我最终得到以下代码: Object.keys( Object.keys(x) .filter((key) => allowed.includes(key)) .reduce((obj, key) => { obj[key] = x[key]; return obj; }, {}) ).reduce( (r, k) => r.concat(k, ch

我想通过一个对象的关键点过滤它,然后将其展平到一个数组,因此我最终得到以下代码:

Object.keys(
    Object.keys(x)
    .filter((key) => allowed.includes(key))
    .reduce((obj, key) => {
        obj[key] = x[key];
        return obj;
    }, {})
).reduce(
    (r, k) => r.concat(k, choices[k]), []
);
有没有其他方法可以不调用Object.keys两次就完成此操作

提前谢谢

#编辑:

很抱歉没有提供数据,我忘了说我也希望对数据进行排序

例如,我想要这个:

{
  "b": [
    "b1",
    "b2",
    "b3"
  ],
  "v": [
    "v1",
    "v2",
    "v3"
  ],
  "a": [
    "a1",
    "a2",
    "a3"
  ]
}
像这样:

["a", "a1", "a2", "a3", "b", "b1", "b2", "b3"]
允许的
是:
[“a”,“b”]

这就是你的意思吗

Array.from(Object.entries(x).filter(x=>allowed.includes(x[0])).map(x=>x[1]));
// map "1" for values, "0" for keys or map {x[0]:x[1]} 
// to return an array of objects representing the filtered key=>value pairs.
//where "x" is the object
这里还有一个代码笔测试:
除非您的数据中有非常奇怪的东西,否则以下代码完全没有必要:

Object.keys(x)
.filter((键)=>允许。包括(键))
.reduce((对象,键)=>{
obj[key]=x[key];
返回obj;
}, {})
它将获取对象
x
,过滤其键,并使用过滤后的值创建一个新对象:

constx={a:1,b:2,c:3};
允许的常数=[“a”,“c”];
常量y=对象键(x)
.filter((键)=>允许。包括(键))
.reduce((对象,键)=>{
obj[key]=x[key];
返回obj;
}, {});

控制台日志(y);//{a:1,c:3}请添加数据。向我们展示您的对象,以便我们看到您正在处理的内容。当然:((yourobj).filter(在这里完成您的工作))我甚至不认为需要第一次
reduce
调用。您获取
x
的键,对其进行过滤,然后使用
x
中过滤的键及其值创建一个新对象,然后…再次获取其键?它与
Object.keys(x).filter(/*仅允许*/).reduce((r,k)=>r.concat(k,choices[k]),[])不一样吗?
?感谢您的澄清:)