反转Object.entries转换

use*_*ert 16 javascript ecmascript-6

我正在使用Object.entries,以便从嵌套对象中获取一些值并过滤它.

obj = Object.entries(obj)
  .filter(([k, v]) => {
    return true; // some irrelevant conditions here
  });
Run Code Online (Sandbox Code Playgroud)

我的对象最终成为一个数组,键和val的数组.

[['key1', val]['key2', val']['key3', val]]
Run Code Online (Sandbox Code Playgroud)

有没有一种直接的方法将这些映射回对象?原始对象结构是:

{ key:val, key2:val2, key3:val3 }
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 25

当然,只需使用.reduce分配给一个新对象:

const input = { key:'val', key2:'val2', key3:'val3' };

const output = Object.entries(input)
  .filter(([k, v]) => {
    return true; // some irrelevant conditions here
  })
  .reduce((accum, [k, v]) => {
    accum[k] = v;
    return accum;
  }, {});
console.log(output);
Run Code Online (Sandbox Code Playgroud)


chi*_*ens 12

对于新浏览器,使用 Object.fromEntries:

Object.fromEntries(arr); 
Run Code Online (Sandbox Code Playgroud)

对于较旧的 js,它仍然可以是one liner

arr.reduce((acc,[k,v])=>(acc[k]=v,acc),{})
Run Code Online (Sandbox Code Playgroud)

例子:

Object.entries(sampleObject) // Turn object to array
   .reduce((acc,[k,v])=>(acc[k]=v,acc),{}) // Turn it back to object.
Run Code Online (Sandbox Code Playgroud)


Jar*_*a X 8

将Object.assign与map [k,v]=> 的地图一起使用{[k]: v}

例如,下面的代码只会以键开头 key

var obj = {
  key: 1,
  key2: 2,
  key3: 3,
  removed: 4,
  alsoRemoved: 5
}

obj = Object.assign({}, ...Object.entries(obj)
    .filter(([k, v]) => {
        return k.startsWith('key');
    })
    .map(([k, v]) => ({[k]: v}))
);

console.log(obj);
Run Code Online (Sandbox Code Playgroud)