我正在从地图函数中获取空项目,而不是有条件创建的项目

问题描述 投票:1回答:1

在ngRx的简化器中,我试图从与if条件匹配的项目创建单个项目,但改为获取空项目。请帮助!

这是Reducer代码:

on(rawSignalsActions.changeRangeSchema, (state, { rangeSchemaName }) => ({
...state,
engagementSignal: state.rangeSchemas.map(
    item => {
        if(item.mapping.rangeSchemaName === rangeSchemaName){
            let engagementSignal: EngagementSignal=
            {
                id:0,
                name:'',
                metaSignalName:'',
                rangeSchemaName:'',
                type:2,
                mappedGraphSignals:[],
                signalInputs:[]
            };
            engagementSignal.id = item.mapping.id;
            engagementSignal.name = item.mapping.rangeSchemaName;
            engagementSignal.metaSignalName = item.mapping.metaSignalName;
            engagementSignal.rangeSchemaName = item.mapping.rangeSchemaName;
            engagementSignal.signalCounts = item.signalCounts;
            engagementSignal.type = item.mapping.type;
            engagementSignal.mappedGraphSignals = item.abstractSignals.map(
              signal => {
                let mappedGraphSignal: MappedGraphSignal = {
                    id:0,
                    name:'',
                    totalValues:0,
                    uniqueUsers:0,
                    mappedAttitudes:[],
                    signalRange:[]
                };
                mappedGraphSignal.id = signal.abstractSignal.id;
                mappedGraphSignal.name = signal.abstractSignal.name;
                mappedGraphSignal.totalValues = 1234; //dummy values for now
                mappedGraphSignal.uniqueUsers = 1234;
                mappedGraphSignal.mappedAttitudes = signal.signalAttitudes;
                if (signal.numericMappings) {
                  mappedGraphSignal.signalRange = signal.numericMappings;
                } else {
                  mappedGraphSignal.signalRange = signal.textMappings;
                }
                return mappedGraphSignal;
              }
            );
            //dummy values for now
            engagementSignal.signalInputs = [
              {
                value: '0',
                count: 2376
              },
              {
                value: 'no',
                count: 3423
              },
              {
                value: '1',
                count: 1264
              },
              {
                value: 'yes',
                count: 5423
              }
            ];
            return engagementSignal;
        }
    }
)[0],
linkedRangeSchema: something  
})),

我想获取单个项目对象而不是数组,而丢弃其余的数组。当我调试应用程序时,在通过map函数之后,我得到了engagementSignal的值:

enter image description here

javascript angular typescript2.0
1个回答
0
投票

通过将过滤器应用于数组,然后使用map函数解决了该问题!

这里是工作代码段:

on(rawSignalsActions.changeRangeSchema, (state, { rangeSchemaName }) => ({
...state,
engagementSignal: state.rangeSchemas.filter(item =>item.mapping.rangeSchemaName === rangeSchemaName).map(
    item => {
            let engagementSignal: EngagementSignal=
            {
                id:0,
                name:'',
                metaSignalName:'',
                rangeSchemaName:'',
                type:2,
                mappedGraphSignals:[],
                signalInputs:[]
            };
            engagementSignal.id = item.mapping.id;
            engagementSignal.name = item.mapping.rangeSchemaName;
            engagementSignal.metaSignalName = item.mapping.metaSignalName;
            engagementSignal.rangeSchemaName = item.mapping.rangeSchemaName;
            engagementSignal.signalCounts = item.signalCounts;
            engagementSignal.type = item.mapping.type;
            engagementSignal.mappedGraphSignals = item.abstractSignals.map(
              signal => {
                let mappedGraphSignal: MappedGraphSignal = {
                    id:0,
                    name:'',
                    totalValues:0,
                    uniqueUsers:0,
                    mappedAttitudes:[],
                    signalRange:[]
                };
                mappedGraphSignal.id = signal.abstractSignal.id;
                mappedGraphSignal.name = signal.abstractSignal.name;
                mappedGraphSignal.totalValues = 1234; //dummy values for now
                mappedGraphSignal.uniqueUsers = 1234;
                mappedGraphSignal.mappedAttitudes = signal.signalAttitudes;
                if (signal.numericMappings) {
                  mappedGraphSignal.signalRange = signal.numericMappings;
                } else {
                  mappedGraphSignal.signalRange = signal.textMappings;
                }
                return mappedGraphSignal;
              }
            );
            engagementSignal.signalInputs = [
              {
                value: '0',
                count: 2376
              },
              {
                value: 'no',
                count: 3423
              },
              {
                value: '1',
                count: 1264
              },
              {
                value: 'yes',
                count: 5423
              }
            ];
            return engagementSignal;
    }
)[0],
linkedRangeSchema: something  
})),
© www.soinside.com 2019 - 2024. All rights reserved.