port: extend merge built-in function #3858
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #3857
Description
extend merge built-in function
Specific Changes
Originally,
merge
only accepts objects.For example:
merge({}, {k1:'v1'}, {k2:'v2', k3:'v3'})
but sometimes the input is an array, and there is no way to convert the array into a list of objects.
The solution is to change the merge function to accept
array
type as well.The logic is, if the item is array, merge its object children.
For example:
merge({k1:'v1'}, [{k2:'v2'}, {k3: 'v3'}], {k4:'v4'})
The second item is array, if we follows the previous practice, would get en error which shows the input only accepts "structure object", but not array. But now, you would get the right result:
{ "k1":"v1", "k2":"v2", "k3":"v3", "k4":"v4"}
But it should be noted that, the flatten operator would be applied for only once. If the array is nested, exception would be thrown too.
For example:
merge([{k1:'v1'}, {k2:'v2'}])
-> okmerge([{k1:'v1'}, [{k2:'v2'}]])
-> the item of the array should be an object.Doc change
add [Doc should change] mark