var arr = [
{"code": "a", "poll": 7},
{"code": "b", "poll": 2},
{"code": "c", "poll": 18},
{"code": "a", "poll": 5},
{"code": "c", "poll": 12},
{"code": "a", "poll": 1}
];
var arr2 = [
{"code": "a", "poll": 13},
{"code": "b", "poll": 2},
{"code": "c", "poll": 30}
];
如何实现arr → 到arr1 的转变,且code值 不仅仅为 a b c 也可能为 adsdsd dsdsd a223 任意值 如何实现 类似转变
给你来一个不考虑性能的
再来个一次遍历的,以空间换时间。
我写了个解决的例子,参考一下。不过我要先讲一下,你的问题中就已经有错误的语法。物件字面定义不是这样用的,这像是JSON格式:
这如果是JSON字串,要先解析为物件才是对的作法。
第一个例子的思路是很直觉的解决,用for语句寻遍整个原先的阵列(arr),另外用个新的阵列装找到的每个物件,如果发现在新阵列(arr2)中的物件中的code属性有相同的,就不新增,而是作poll属性的相加:
第二个例子的思路,是先不管新阵列长什么样,反正这里主要看的是物件中的code属性,相同的的code属性的值,要把对应的poll属性相加就是。所以先作这件事,最后再来组合新阵列。
会有第二种的思路是在js中有一些物件的内建运算符或方法,可以用得上,看起来代码行数会少些。稍微测了一下大数据(阵列中有100万与1000万笔物件,code只有10种情况时),第一种比较快,大约是第二种的3-4倍快,实际还是要看应用。
我没花太多时间再想太细,不过代码都有测过是可以正常运作,希望对你有帮得上忙了。有细部不理解可以再问。
测试代码:
你这是js吧