反转Object.entries转换

时间:2018-04-13 00:07:31

标签: javascript ecmascript-6

我正在使用Object.entries来从嵌套对象中获取一些值并对其进行过滤。

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

我的对象最终成为数组,键和数组的数组。

[['key1', val]['key2', val']['key3', val]]

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

{ key:val, key2:val2, key3:val3 }

6 个答案:

答案 0 :(得分:19)

当然,只需使用.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);




有一个Object.fromEntries的提案,这使得这更容易 - 您只需传递一系列条目,然后从这些条目创建对象。这适用于最新版本的Firefox和Chrome:



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

const output = Object.fromEntries(
  Object.entries(input)
    .filter(([k, v]) => {
      return true; // some irrelevant conditions here
    })
);
console.log(output);




答案 1 :(得分:7)

将Object.assign与映射[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);




答案 2 :(得分:0)

deconstructioncomma operator中使用reduce:

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

const output = Object.entries(input)
  .filter(([k, v]) => {
     return true; // some irrelevant conditions here
  })
  .reduce((acc,[k,v])=>( acc[k]= v, acc  ) ,{} );

应该具有与SomePerformance的答案相同的功能,并且语法要简洁一些

答案 3 :(得分:0)

随着点滴传播,它可能是一个衬里

arr.reduce((a,[k,v])=>({...a,[k]:v}),{}) 

样品

Object.entries(sampleObject) // Turn object to array
   .reduce((a,[k,v])=>({...a,[k]:v}),{}) // Turn it back to object.

答案 4 :(得分:0)

如果您确切地知道要排除的条目,则可以将对象解构与散布结合使用:

function clean(obj) {
  const { unwanted1, unwanted2, ...wanted } = obj;
  return { ...wanted };
}

在某些情况下,这可能是最干净的解决方案。

答案 5 :(得分:-1)

function undoEntries(entered){
  let output = {};
  entered.forEach(item => {
    output[item[0]] = item[1]
  });
  return output;
};
// Example
const obj = { a: 1, b: 2, c: 3};
const input = Object.entries(obj);
const output = undoEntries(input);
console.log(output);