JavaScript数组使用if语句展平

时间:2016-04-21 13:40:05

标签: javascript

使用if语句展平两个数组 我有array1和array2 我想要array3

<script>
    var array1 = [[5,10],[6,10],[7,10],[8,10],[9,10]];
    var array2 = [[1,10],[2,10],[3,10],[4,10],[5,40],[6,40]];

    // only the second number will add if they are different
    // [5,10] + [5,40] 
    // [6,10] + [6,40]

    // array3 = [[1,10],[2,10],[3,10],[4,10],[5,50],[6,50],[7,10],[8,10],[9,10]];

</script>

1 个答案:

答案 0 :(得分:0)

这是一个在单个循环和临时对象中使用Array#forEach()的提案。

var array1 = [[5, 10], [6, 10], [7, 10], [8, 10], [9, 10]],
    array2 = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 40], [6, 40]],
    array3 = [];

array2.concat(array1).forEach(function (a) {
    if (!this[a[0]]) {
        this[a[0]] = [a[0], a[1]];
        array3.push(this[a[0]]);
        return;
    }
    if (this[a[0]][1] !== a[1]) {
        this[a[0]][1] += a[1];
    }
}, Object.create(null));


document.write('<pre>' + JSON.stringify(array3, 0, 4) + '</pre>');

使用for循环

的解决方案

var array1 = [[5, 10], [6, 10], [7, 10], [8, 10], [9, 10]],
    array2 = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 40], [6, 40]],
    array3 = [],
    i, 
    temp = Object.create(null),
    array = array2.concat(array1);

for (i = 0; i < array.length; i++) {
    if (!temp[array[i][0]]) {
        temp[array[i][0]] = [array[i][0], array[i][1]];
        array3.push(temp[array[i][0]]);
        continue;
    }
    if (temp[array[i][0]][1] !== array[i][1]) {
        temp[array[i][0]][1] += array[i][1];
    }
}

document.write('<pre>' + JSON.stringify(array3, 0, 4) + '</pre>');