这段JavaScript代码更高效,但可读性更好
假设我有3个数组,其中一个基于另一个数组,但我需要将它们组合成一个。。我在这里使用forEach循环将项目推送到数组中,但我觉得这样做效率很低这段JavaScript代码更高效,但可读性更好,javascript,Javascript,假设我有3个数组,其中一个基于另一个数组,但我需要将它们组合成一个。。我在这里使用forEach循环将项目推送到数组中,但我觉得这样做效率很低 const arr1=[1,2,3]; 常数arr2=[“a”,“b”]; 常量arr3=[“foo”、“bar”、“baz”]; 常量obj={ “1_a”:[1,2], “1_b”:[1,2,3], “2_a”:[1], “2_b”:[1,2], “3_a”:[], “3_b”:[1,2,3] }; //使用forEach循环将所有项推送到临时数组,
const arr1=[1,2,3];
常数arr2=[“a”,“b”];
常量arr3=[“foo”、“bar”、“baz”];
常量obj={
“1_a”:[1,2],
“1_b”:[1,2,3],
“2_a”:[1],
“2_b”:[1,2],
“3_a”:[],
“3_b”:[1,2,3]
};
//使用forEach循环将所有项推送到临时数组,
//我觉得这种逻辑可以变得更具可读性和效率
设tempArr=[];
arr1.forEach(i=>
arr2.forEach(j=>
tempArr.push(`i}{j}`)
)
);
arr3.forEach(i=>tempArr.push(i));
//在临时数组上循环以获得最终结果(记录在下面)
const arr=tempArr.map(键=>{
if(obj[key]!==undefined&&obj[key].length>1)返回`update_${key}`;
否则返回键;
});
//结果
console.log(arr);//[“update_1_a”、“update_1_b”、“2_a”、“update_2_b”、“3_a”、“update_3_b”]
我觉得所有的forEach
推送都有问题,我觉得应该有嵌套映射函数之类的东西。。?请帮帮我
我希望发生以下情况:
- arr2的值基于arr1的循环(参见示例),这些值与下划线pseudo:
组合在一起,该项被推送到数组中arr1Item\u arr2Item
- arr3的值,只是循环和推送
- 合并后的数组会循环,如果该项的值在对象中,并且该键的数组长度大于1,则返回
,否则只返回update\uuuuuu
- 不确定是否更好,但它是一个
减少和映射:
const arr1=[1,2,3];
常数arr2=[“a”,“b”];
常量arr3=[“foo”、“bar”、“baz”];
常量对象={
“1_a”:[1,2],
“1_b”:[1,2,3],
“2_a”:[1],
“2_b”:[1,2],
“3_a”:[],
“3_b”:[1,2,3],
};
const result=arr1.reduce(
(a,c)=>
(a.concat(
arr2.map((y)=>{
常量键=`c}{y}`;
返回obj[key]!==未定义和&obj[key]。长度>1
?`更新${key}`
:键;
})
)),
arr3
);
控制台日志(结果)代码>您可以尝试:
const arr1=[1,2,3];
常数arr2=['a','b'];
常量对象={
“1_a”:[1,2],
“1_b”:[1,2,3],
“2_a”:[1],
“2_b”:[1,2],
“3_a”:[],
“3_b”:[1,2,3]
};
const result=arr1.reduce((acc,a1)=>
[…acc,…arr2.map(a2=>{
const keyCombined=`${a1}{a2}`;
返回对象[keyCombined]。长度>1
?`更新${keyCombined}`
:“${keyCombined}”;
})], []);
控制台日志(结果)代码>另一种使用flatMap
的方法:
const arr1=[1,2,3];
常数arr2=[“a”,“b”];
常量arr3=[“foo”、“bar”、“baz”];
常量对象={
“1_a”:[1,2],
“1_b”:[1,2,3],
“2_a”:[1],
“2_b”:[1,2],
“3_a”:[],
“3_b”:[1,2,3]
};
常数结果=[
……啊,
…啊
.flatMap(a=>arr2
.map(b=>{
常量键=`${a}{b}`;
返回对象[key]。长度>1
?`更新${key}`
:键;
}))
]
console.log(result)
请添加想要的结果。@NinaScholz I did构造最终数组的逻辑是什么?请解释。@GhassenLouhaichi我尽量解释清楚,请看:)arr3的目的是什么?它没有被使用,你也说“长于5”,但根据你粘贴的代码,它更像1。没什么大不了,但不需要(a=a.concat(
,)(a.concat(
)就足够了。但是如果有第三个数组呢?(见帖子):-)reduce可以使用第三个数组作为起点,但是示例对象没有foo
bar
或baz
keys@Anthony你做的编辑很好,太棒了,谢谢!