将对象的键指定为该对象内的值

时间:2018-01-10 20:32:01

标签: javascript arrays object lodash

在lodash中我们使用_mapKeys方法,我这样使用:

这是一个对象数组:

const posts = [
  {
    id: 123,
    title: 'Hello',
  },
  {
    id: 321,
    title: 'World',
  },
];

从那里我使用这样的方法:

const postsObjWithKeys = _.mapKeys(posts, 'id');

console.log(postsObjWithKeys);

结果是:

{
  123: {id: 123, title: 'Hello'},
  321: {id: 321, title: 'World'}
}

完美!正是我想要的!

问题是如何在“反向”中实现这一目标?这意味着如果我有这样的对象:

const posts = {
  123: {
    title: 'Hello' 
  },
  321: {
    title: 'World'
  }
}

是否可以获取密钥并将其指定为值(如果为id)?最终结果是:

const posts = {
  123: {
    id: 123,
    title: 'Hello' 
  },
  321: {
    id: 321,
    title: 'World'
  }
}

2 个答案:

答案 0 :(得分:3)

使用lodash,您可以使用_.mapValues()

实现相反的目标

const posts = {
  123: {
    title: 'Hello' 
  },
  321: {
    title: 'World'
  }
}

const result = _.mapValues(posts, (value, id) => _.assign({}, value, { id }));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

答案 1 :(得分:2)

只需迭代所有键并在对象上添加id

const posts = {
  123: {
    title: 'Hello' 
  },
  321: {
    title: 'World'
  }
}

Object.keys(posts).forEach(k=>{
    posts[k].id = k;
});

console.log(posts);

/*
const posts = {
  123: {
    id: 123,
    title: 'Hello' 
  },
  321: {
    id: 321,
    title: 'World'
  }
}
*/