代码实现
const complexJson = {
"mainArray": [
{ "subArray1": [1, 2, 3], "subArray2": [4, 5, 6] },
{ "subArray1": [7, 8, 9], "subArray2": [10, 11, 12] }
]
};
function sumArray(arr) {
return arr.reduce((acc, val) => acc + val, 0);
}
function createNewArray() {
const newArray = [];
for (const obj of complexJson.mainArray) {
const sumSubArray1 = sumArray(obj.subArray1);
const sumSubArray2 = sumArray(obj.subArray2);
if (sumSubArray1 > sumSubArray2) {
newArray.push([...obj.subArray1]);
} else {
newArray.push([...obj.subArray2]);
}
}
return newArray;
}
const result = createNewArray();
console.log(result);
算法逻辑解释
- 计算数组元素和的函数
sumArray
:
- 使用
Array.prototype.reduce
方法,它对数组中的每个元素执行一个由您提供的函数(reducer),将其结果汇总为单个返回值。
- 初始值
acc
设为 0,val
是数组中的每个元素,通过 acc + val
累加,最终返回数组所有元素的和。
- 创建新数组的函数
createNewArray
:
- 初始化一个空数组
newArray
用于存储结果。
- 使用
for...of
循环遍历 complexJson.mainArray
中的每个对象。
- 对于每个对象,分别计算
subArray1
和 subArray2
的元素和 sumSubArray1
与 sumSubArray2
。
- 根据规则,如果
sumSubArray1
大于 sumSubArray2
,将 subArray1
的拷贝(使用展开运算符 ...
确保是新数组,避免引用问题)添加到 newArray
中;否则,添加 subArray2
的拷贝。
- 最后返回
newArray
。
性能优化
- 减少重复计算:
- 在原代码中,对每个对象的
subArray1
和 subArray2
只计算一次和,避免了重复计算带来的性能开销。
- 避免不必要的内存分配:
- 使用展开运算符
...
创建新数组时,确保只在必要时创建新的数组实例,而不是每次都对整个数组进行深拷贝(这里只是简单数组,不需要深拷贝)。
- 并行计算(适用于大规模数据):
- 如果数据规模非常大,可以考虑使用 Web Workers(在浏览器环境)或并行处理库(如
paralleljs
)将数组分块并行计算。例如,将 mainArray
分成多个小块,在不同的线程或进程中分别计算每个小块内的数组和并生成结果,最后合并这些结果。
- 使用更高效的数据结构(若适用):
- 如果数据结构允许,在创建 JSON 数据时可以提前计算一些和值并存储,这样在后续处理时就不需要重复计算数组和,直接使用预计算的值进行比较。