将具有属性的数组映射到具有不同属性的数组

Map an array with attributes to array with differents attributes

总结:

我需要做这样的事情:

来自 :

[  {
      id: 1
      content: "hello"
      senderId: 1234
    },
    {
      id : 2
      content: "how are you"
      senderId: 1234
    },
]

至:

[
    {
        _id: 1,
        text: 'hello',
        user: {
            _id: 1234,
        },
    },
    {
        _id: 2,
        text: 'how are you',
        user: {
            _id: 1234,
        },
    },
]

解释:

我对 javascript(以及 'new' javascript 用法,如 ES6)非常陌生。我正在写一个关于本机反应的应用程序。我正在将 mobx 与 firebase 一起使用。

我有一个 MessageStore,其中包含来自 firebase 的 @oberservable 消息数组。

import {observable, computed} from 'mobx';
import {Fb} from '../firebase/firebase';
import {map, toJS} from 'mobx';
import {Config} from '../config/config';

class Message{
  id : string
  content : string
  senderId : string
}

class MessagesStore {
  @observable messages = []
  idConversation : string

  constructor(idConversation) {
    this.idConversation = idConversation
    Fb.messages.child(idConversation).on('value', (snapshot) => {
      value = snapshot.val();
      let message = new Message()
      message.id = value.id
      message.content = value.content
      message.senderId = value.senderId
      this.messages.push(message)
    });
  }

  @computed get allMessages(){
    return this.messages
  }

  @computed get json() {
    return toJS(this.messages);
  }
}
...

问题是我想在 UI 中使用图书馆进行聊天 (https://github.com/FaridSafi/react-native-gifted-chat) 状态必须是这样的:

  this.setState({
         messages: [
           {
             _id: 1,
             text: 'Hello developer',
             createdAt: new Date(),
             user: {
               _id: 2,
               name: 'React Native',
               avatar: 'https://facebook.github.io/react/img/logo_og.png',
             },
           },
         ],
       })
    )

我把这段代码放在:

messagesStore.messages.observe(() => ...

我的问题是:如何将我的消息数组 (messagesStore.messages) 映射到库所需的数组。例如,我需要将我的消息属性 content 映射到 text,或者将 id 映射到 _id

我使用 Array.map() 函数找到了解决方案:

var array1 = array2.map(function(obj){
  var rObj = {};
  rObj['_id'] = obj.id;
  rObj['text'] = obj.content;
  rObj['user'] = {};
  rObj['user']['_id'] = obj.senderId;
  return rObj;
})

编辑 2 :

使用 ES6 清理代码:

const array = array2.map(obj => { 
  const { id, content, senderId } = message; 
  return { 
    _id: id, 
    text: content, 
    user: { 
      _id: senderId
    } 
  }; 
});