array-merge-by-key
v1.0.1
Published
Effectively merge arrays of objects into a single array by merging objects with the same key (property).
Downloads
33,097
Maintainers
Readme
array-merge-by-key
Effectively merge arrays of objects into a single array by merging objects with the same key (property). Also use this module to merge objects with the same property value in one array.
This is a micro module, which includes light and well-tested code.
Example
import mergeByKey from "array-merge-by-key";
const array1 = [
{ id: "100500", any: 11, other: "UA", props: "1-1" },
{ id: "100501", any: 22, other: "US", props: "5-9" }, // same id
{ id: "100502", any: 33, other: "EN", props: "1-4" }
];
const array2 = [
{ id: "100501", any: 22, other: "US", props: "9-9" }, // same id
{ id: "100503", any: 44, other: "AU", props: "7-4" }
];
// const arrayN = [...]
const result = mergeByKey("id", array1, array2);
// result is [
// { id: "100500", any: 11, other: "UA", props: "1-1" },
// { id: "100501", any: 22, other: "US", props: "9-9" }, // merged
// { id: "100502", any: 33, other: "EN", props: "1-4" },
// { id: "100503", any: 44, other: "AU", props: "7-4" }
// ]
Usage
Module array-merge-by-key
exports function mergeByKey(key, array1, array2, ...)
by default.
Module uses Object.assign
to merge two objects having the same key (property) value. The
assignment is performed from right to left, which means that the most right passed array will have
priority over previous ones. The comparison of key values is strict (===
operator). The order of
elements in resulting array is the same as they appear in arguments, from left to right, from the
first to the last element of arrays. Objects that do not have a key (property) will never be merged
with others and will have the same memory reference. The new (merged) objects does not mutate old
ones. The new array does not mutate any of passed arrays.
Objects having the same key values in the same array also merge. For example:
mergeByKey("id", [{ id: 1, test: "54" }, { id: 1, test: "76" }])
// Results with [{ id: 1, test: "76" }]