Javascript for循环中的reduce方法-JS
我尝试使用for循环遍历条目数组,并使用reduce方法,但是reduce在第一个条目之后返回,永远不会到达第二个、第三个等条目以将结果推送到数组v 有什么想法吗Javascript for循环中的reduce方法-JS,javascript,reduce,Javascript,Reduce,我尝试使用for循环遍历条目数组,并使用reduce方法,但是reduce在第一个条目之后返回,永远不会到达第二个、第三个等条目以将结果推送到数组v 有什么想法吗 export const groupEventData = eventData => { console.log(eventData) // returns[{ // "id": "141", // "name": &qu
export const groupEventData = eventData => {
console.log(eventData)
// returns[{
// "id": "141",
// "name": "00333",
// "no_transmission": true,
// "low_battery" :true,
// },
// {
// "id": "307",
// "name": "01163",
// "no_transmission": true,
// "low_data_rate": true,
// }
// ]
// now let's group similar event types
let v = [];
let types = ["no_transmission", "low_data_rate", "low_battery"];
for (let x = 0; x <= types.length; x++) {
let data = eventData.reduce((acc, i) => {
if (!acc[i[types[x]]] && typeof i[types[x]] !== 'undefined') {
acc[i[types[x]]] = [i]
}
else if (Array.isArray(acc[i[types[x]]])) {
acc[i[types[x]]].push(i);
}
else if (typeof acc[i[types[x]]] === 'object') {
acc[i[types[x]]] = [acc[i[types[x]]]]
acc[i[types[x]]].push(i)
}
return acc;
}, {});
// Doesn't add a property for the type if there are no data
Object.keys(data).length && v.push({ [types[x]: data });
return v;
};
}
export const groupEventData=eventData=>{
console.log(eventData)
//返回[{
//“id”:“141”,
//“名称”:“00333”,
//“无传输”:正确,
//“低电量”:正确,
// },
// {
//“id”:“307”,
//“名称”:“01163”,
//“无传输”:正确,
//“低数据率”:正确,
// }
// ]
//现在让我们将类似的事件类型分组
设v=[];
let type=[“无传输”、“低数据速率”、“低电池”];
对于(设x=0;x{
如果(!acc[i[types[x]]]&&typeof i[types[x]]!='undefined'){
acc[i[类型[x]]]=[i]
}
else if(Array.isArray(acc[i[types[x]]])){
acc[i[类型[x]]].推送(i);
}
else if(acc的类型[i[types[x]]]=='object'){
acc[i[类型[x]]]=[acc[i[类型[x]]]]
acc[i[类型[x]]].推送(i)
}
返回acc;
}, {});
//如果没有数据,则不为类型添加属性
Object.keys(data.length&&v.push({[types[x]:data});
返回v;
};
}
您的for循环中有return v
。请尝试将其撞到紧靠其下方的花括号下方。现在for循环仅迭代一次,然后返回一个值
在下面为我工作:
const eventData = [
{"id": "141","name": "00333","no_transmission": true,"low_battery": true},
{"id": "307","name": "01163","no_transmission": true,"low_data_rate": true}
]
const type = 'bc'
const types = ["no_transmission", "low_data_rate", "low_battery"]
const groupEventData = (eventData, type) => {
let v = [];
for (let x = 0; x <= types.length; x++) {
let data = eventData.reduce((acc, i) => {
if (!acc[i[types[x]]] && typeof i[types[x]] !== 'undefined') {
acc[i[types[x]]] = [i]
}
else if (Array.isArray(acc[i[types[x]]])) {
acc[i[types[x]]].push(i);
}
else if (typeof acc[i[types[x]]] === 'object') {
acc[i[types[x]]] = [acc[i[types[x]]]]
acc[i[types[x]]].push(i)
}
return acc;
}, {});
Object.keys(data).length && v.push({ [`${types[x]}_${type}`]: data });
};
return v;
}
console.log('groupEventData', groupEventData(eventData, type))
const eventData=[
{“id”:“141”,“name”:“00333”,“无传输”:true,“低电量”:true},
{“id”:“307”,“name”:“01163”,“无传输”:true,“低数据率”:true}
]
常量类型='bc'
常量类型=[“无传输”、“低数据速率”、“低电池”]
const groupEventData=(eventData,type)=>{
设v=[];
对于(设x=0;x{
如果(!acc[i[types[x]]]&&typeof i[types[x]]!='undefined'){
acc[i[类型[x]]]=[i]
}
else if(Array.isArray(acc[i[types[x]]])){
acc[i[类型[x]]].推送(i);
}
else if(acc的类型[i[types[x]]]=='object'){
acc[i[类型[x]]]=[acc[i[类型[x]]]]
acc[i[类型[x]]].推送(i)
}
返回acc;
}, {});
Object.keys(data.length&&v.push({[`${types[x]}}{${type}}]:data});
};
返回v;
}
log('groupEventData',groupEventData(eventData,类型))
你能把你的输入显示为一个吗?这给你的想象留下了太多的余地(类型
,类型
,事件数据
,实际/预期输出)。谢谢。更重要的是,getEventTypes()
-这可能是一个同步吗?谢谢,澄清了谢谢,但它仍然是不必要的抽象。应该很容易将其转换为一个具有明确硬编码的输入/输出数据结构的表单,可以作为一个执行。您试图在这里实现什么输出(明确/逐字显示)?此外,这似乎与React无关,因此如果这不重要,我建议删除标记。谢谢。我不这么认为,我想做的只是能够将reduce函数的循环次数作为类型数组的长度(在上述情况下,是3倍)但是它在完成第一个条目后返回..有意义,因为有返回acc。我要问的是如何循环reduce函数n次并存储在v数组中