Hướng dẫn merge duplicates in array javascript - hợp nhất các bản sao trong javascript mảng

Tôi có mảng đối tượng này:

var arr = [
    {
        name: 'John',
        contributions: 2
    },
    {
        name: 'Mary',
        contributions: 4
    },
    {
        name: 'John',
        contributions: 1
    },
    {
        name: 'Mary',
        contributions: 1
    }
];

... và tôi muốn hợp nhất các bản sao nhưng tổng hợp những đóng góp của họ. Kết quả sẽ giống như sau:

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];

Làm thế nào tôi có thể đạt được điều đó với JavaScript?

Hỏi ngày 10 tháng 7 năm 2016 lúc 17:46Jul 10, 2016 at 17:46

Hướng dẫn merge duplicates in array javascript - hợp nhất các bản sao trong javascript mảng

3

Bạn có thể sử dụng bảng băm và tạo một mảng mới với các tổng, bạn cần.

var arr = [{ name: 'John', contributions: 2 }, { name: 'Mary', contributions: 4 }, { name: 'John', contributions: 1 }, { name: 'Mary', contributions: 1 }],
    result = [];

arr.forEach(function (a) {
    if (!this[a.name]) {
        this[a.name] = { name: a.name, contributions: 0 };
        result.push(this[a.name]);
    }
    this[a.name].contributions += a.contributions;
}, Object.create(null));

console.log(result);

Đã trả lời ngày 10 tháng 7 năm 2016 lúc 17:52Jul 10, 2016 at 17:52

Hướng dẫn merge duplicates in array javascript - hợp nhất các bản sao trong javascript mảng

Nina Scholznina ScholzNina Scholz

360K24 Huy hiệu vàng323 Huy hiệu bạc365 Huy hiệu Đồng24 gold badges323 silver badges365 bronze badges

4

Bạn cũng có thể làm điều này bằng cách sử dụng Linq Framework được cung cấp bởi linq.js

Đây là mã của tôi bằng Linq.js và đây gần giống như câu lệnh SQL.

var arr = [
    {
        name: 'John',
        contributions: 2
    },
    {
        name: 'Mary',
        contributions: 4
    },
    {
        name: 'John',
        contributions: 1
    },
    {
        name: 'Mary',
        contributions: 1
    }
];


var aggregatedObject = Enumerable.From(arr)
        .GroupBy("$.name", null,
                 function (key, g) {
                     return {
                       name: key,
                       contributions: g.Sum("$.contributions")
                     }
        })
        .ToArray();

console.log(aggregatedObject);

Đã trả lời ngày 10 tháng 7 năm 2016 lúc 18:11Jul 10, 2016 at 18:11

Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng set và concat ()

Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt sau khi kết hợp hai mảng. Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng.

  • Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 2015 trở đi.
  • Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng trong khi Loop và Concat ()
  • Hợp nhất hai mảng bằng toán tử lan truyền
  • Nếu bất kỳ mục nào có trong cả MyArray1 và MyArray2, nó sẽ không được thêm vào mảng cuối cùng.
  • Nếu bất kỳ mục nào có trong cả MyArray1 và MyArray2, nó sẽ không được thêm vào mảng cuối cùng.

Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 2015 trở đi.

Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng trong khi Loop và Concat () filter() method returns a new array consisting of all the elements that pass the test implemented by the provided function.

Ở đây, trong mã trên, chúng tôi đang kết hợp hai mảng vào MyArray3.concat() method merges two or more arrays and returns the new array.

Example:-

Sau đó, lặp lại myArray3 cho đến khi chiều dài của nó và kiểm tra xem có lặp lại bất kỳ phần tử nào không, nếu có thì nó sẽ được xóa khỏi myArray3 bằng unShift ().

Hợp nhất các mảng dưới đây và loại bỏ các bản sao trong mảng kết quả.

  • MyArray1 = [5, 7, 9]
  • MyArray2 = [9, 8, 5, 10]

Code:-

var myArray1 = [5, 7, 9];
var myArray2 = [9, 8, 5, 10];
var myFinalArray = myArray1.concat(myArray2.filter((item) => myArray1.indexOf(item) < 0));
console.log(myFinalArray);

Output:-

[ 5, 7, 9, 8, 10 ]

Explanation:-

  • Ở đây, trong mã trên, chúng tôi đang hợp nhất hai mảng sử dụng & nbsp; phương thức Concat () & nbsp; the concat() method.
  • Bước tiếp theo là chỉ lọc ra các mục duy nhất trong mảng cuối cùng bằng phương thức & nbsp; filter () & nbsp;unique items in the final array using the filter() method.
  • Nếu bất kỳ mục nào có trong cả MyArray1 và MyArray2, nó sẽ không được thêm vào mảng cuối cùng.

Hợp nhất hai mảng bằng toán tử lan truyền

Bộ JavaScript, là lưu trữ các giá trị duy nhất.Set is to store unique values.

Cú pháp lan truyền của JavaScript, () cho phép bất kỳ điều gì giống như một mảng được mở rộng ở những nơi cần có hoặc nhiều đối số hơn.Spread syntax(…) allows any iterable like an array to be expanded at places where zero or more arguments are requiredOne can also use it to expand object expressions where zero or more key-value pairs are needed.

Example:-

Hợp nhất các mảng dưới đây và loại bỏ các bản sao trong mảng kết quả.

  • MyArray1 = [5, 7, 9]
  • MyArray2 = [9, 8, 5, 10]

Code:-

var myArray1 = [5, 7, 9];
var myArray2 = [9, 8, 5, 10];
var myFinalArray = [...new Set([...myArray1 ,...myArray2])]; 
console.log(myFinalArray);

Output:-

[ 5, 7, 9, 8, 10 ]

Explanation:-

  • Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt bằng cú pháp lan truyền (Mạnh).
  • Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng.

Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 6 trở đi.

Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng set và concat ()

Example:-

Hợp nhất các mảng dưới đây và loại bỏ các bản sao trong mảng kết quả.

  • MyArray1 = [5, 7, 9]
  • MyArray2 = [9, 8, 5, 10]

Code:-

var myArray1 = [5, 7, 9];
var myArray2 = [9, 8, 5, 10];
//after concatenating two arrays, add the merged array to the set
var myFinalArray = Array.from(new Set(myArray1.concat(myArray2))); 
console.log(myFinalArray);

Output:-

[ 5, 7, 9, 8, 10 ]

Explanation:-

  • Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt bằng cú pháp lan truyền (Mạnh).Set object after concatenating two arrays. Since Set does not allow duplicates, unique values get added to the final array.

Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng.

Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 6 trở đi.

Example:-

Hợp nhất các mảng dưới đây và loại bỏ các bản sao trong mảng kết quả.

  • MyArray1 = [5, 7, 9]
  • MyArray2 = [9, 8, 5, 10]

Code:-

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];
1

Output:-

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];
2

Explanation:-

  • Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt bằng cú pháp lan truyền (Mạnh).concatenating two arrays into myArray3.
  • Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng.element is repeated, if yes then it is removed from myArray3 using unshift().

Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 6 trở đi.

Example:-

Hợp nhất các mảng dưới đây và loại bỏ các bản sao trong mảng kết quả.

  • MyArray1 = [5, 7, 9]
  • MyArray2 = [9, 8, 5, 10]

Code:-

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];
3

Output:-

[ 5, 7, 9, 8, 10 ]

Explanation:-

  • Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt bằng cú pháp lan truyền (Mạnh)._arrayA is empty or undefined, the function returns _arrayB.
  • Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng._arrayB is empty or not an array, then function returns _arrayA.
  • Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 6 trở đi.falseiterate _arrayB till its length, check if any element is not present in _arrayA, and add it using push().

Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng set và concat ()

  • Ở đây, trong mã trên, chúng tôi thêm hai mảng vào một đối tượng đã đặt sau khi kết hợp hai mảng. Vì Set không cho phép trùng lặp, các giá trị duy nhất được thêm vào mảng cuối cùng.
  • Lưu ý rằng bạn có thể sử dụng giải pháp này với Ecmascript 2015 trở đi.
  • Hợp nhất các mảng và các mục khử trùng lặp bằng cách sử dụng trong khi Loop và Concat ()
  • Ở đây, trong mã trên, chúng tôi đang kết hợp hai mảng vào MyArray3.

Sau đó, lặp lại myArray3 cho đến khi chiều dài của nó và kiểm tra xem có lặp lại bất kỳ phần tử nào không, nếu có thì nó sẽ được xóa khỏi myArray3 bằng unShift ().