Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实现这一目标的最佳方式是什么;加入;使用JS对象?_Javascript_Arrays_Mongodb_Object_Meteor - Fatal编程技术网

Javascript 实现这一目标的最佳方式是什么;加入;使用JS对象?

Javascript 实现这一目标的最佳方式是什么;加入;使用JS对象?,javascript,arrays,mongodb,object,meteor,Javascript,Arrays,Mongodb,Object,Meteor,我正在与MeteorJS(aned MongoDB)合作 我有两个收藏: 事件,带有idEvent 事件类型,带有idEventType(事件类型的有限列表) (活动类型) 两个集合之间的链接必须通过idEvent==idEventType实现 目标是创建一个事件数组,并关联eventstype对象 下面的代码是Functional,但我觉得它很可怕。。。你在想什么 events() { // Type of event const eventsType = Events

我正在与MeteorJS(aned MongoDB)合作

我有两个收藏:

  • 事件,带有idEvent
  • 事件类型,带有idEventType(事件类型的有限列表) (活动类型)
两个集合之间的链接必须通过
idEvent==idEventType
实现

目标是创建一个事件数组,并关联eventstype对象

下面的代码是Functional,但我觉得它很可怕。。。你在想什么

  events() {
    // Type of event
    const eventsType = EventsType.find();
    const eventsTypeArray = [];
    eventsType.forEach((ev) => {
      eventsTypeArray[ev.idEventType] = ev;
    });

    // List of events
    const eventsList = Events.find();
    const eventsListArray = [];


    // Merge both data
    eventsList.forEach((ev) => {
      const evObj = ev;
      evObj.type = eventsTypeArray[ev.idEvent];
      eventsListArray.push(evObj);
    });

    return eventsListArray;
  }
谢谢D

您可以将
事件列表
用于丰富原始项目:

eventsListArray = eventsList.map(ev => Object.assign({type: eventsTypeArray[ev.idEvent]}, ev))
试运行:

originalArray = [{a:"1"}, {a:"2"}];
dataMap = { "1": 10, "2": 100 };
mappedArray = originalArray.map(i=>Object.assign({b:dataMap[i.a]}, i));
console.log(originalArray);
console.log(mappedArray);
结果:

[{a:"1"}, {a:"2"}] //original array left untouched
[{a:"1", b:10}, {a:"2", b:100}] // mappedArray contains the extra data
您可以将
事件列表
用于丰富原始项目:

eventsListArray = eventsList.map(ev => Object.assign({type: eventsTypeArray[ev.idEvent]}, ev))
试运行:

originalArray = [{a:"1"}, {a:"2"}];
dataMap = { "1": 10, "2": 100 };
mappedArray = originalArray.map(i=>Object.assign({b:dataMap[i.a]}, i));
console.log(originalArray);
console.log(mappedArray);
结果:

[{a:"1"}, {a:"2"}] //original array left untouched
[{a:"1", b:10}, {a:"2", b:100}] // mappedArray contains the extra data

事实上,我最近遇到了一个类似的问题,我想将来自两个集合的数据连接起来

我的解决方案是创建一个新的集合(这是一个仅存在于客户端上的集合)

客户端:

const LocalEvents = new Mongo.Collection(null);
从那里,您可以将连接的对象连接起来并将新对象推送到
LocalEvents
集合中,而不是将它们推送到数组中。这使您能够从本地minimongo集合查询新对象。您需要确保在销毁模板/组件时清除本地集合。如果光标发生变化,还可以运行tracker函数清空
LocalCollection

Tracker.autorun((eventsType) => {
    LocalEvents.remove({});
});

事实上,我最近遇到了一个类似的问题,我想将来自两个集合的数据连接起来

我的解决方案是创建一个新的集合(这是一个仅存在于客户端上的集合)

客户端:

const LocalEvents = new Mongo.Collection(null);
从那里,您可以将连接的对象连接起来并将新对象推送到
LocalEvents
集合中,而不是将它们推送到数组中。这使您能够从本地minimongo集合查询新对象。您需要确保在销毁模板/组件时清除本地集合。如果光标发生变化,还可以运行tracker函数清空
LocalCollection

Tracker.autorun((eventsType) => {
    LocalEvents.remove({});
});

谢谢目前我将使用
.map
。)谢谢目前我将使用
.map
。)完美的非常感谢。你知道我是否意识不到数据地图的指数化吗<代码>eventsType.forEach((ev)=>{eventsTypeArray[ev.idEventType]=ev;})和直接实现
查找
?例如,我们可以这样做:`eventsList.map(ev=>Object.assign(ev,{type:eventsList.find(ev.idtrc)});events列表是Collection.find()@Aurélien Sure的返回,是
对象的第一个参数。assign
可以是任何您想用作结果基础的对象。我认为我们彼此不理解,我很难用另一种语言表达我的担忧!代码胜过文字;-)还是一个很好的安瑟。。。!谢谢@Aaron。我有今天我所期待的一切p@Aur你是我的朋友!完美的非常感谢。你知道我是否意识不到数据地图的指数化吗<代码>eventsType.forEach((ev)=>{eventsTypeArray[ev.idEventType]=ev;})和直接实现
查找
?例如,我们可以这样做:`eventsList.map(ev=>Object.assign(ev,{type:eventsList.find(ev.idtrc)});events列表是Collection.find()@Aurélien Sure的返回,是
对象的第一个参数。assign
可以是任何您想用作结果基础的对象。我认为我们彼此不理解,我很难用另一种语言表达我的担忧!代码胜过文字;-)还是一个很好的安瑟。。。!谢谢@Aaron。我有今天我所期待的一切p@Aur你是我的朋友!