Javascript 将对象与数组合并
我想将对象与数组合并,但它似乎没有按预期工作 我希望使用concat数组,但通过“标签”保留唯一项 第一个对象:Javascript 将对象与数组合并,javascript,lodash,Javascript,Lodash,我想将对象与数组合并,但它似乎没有按预期工作 我希望使用concat数组,但通过“标签”保留唯一项 第一个对象: var object1 = { index: [ { label: 'Ajouter', url: '/_add/:model', icon: 'add', isMain: true }, { label: 'Exporter en CSV', url: '/_export/:mode
var object1 = {
index: [
{
label: 'Ajouter',
url: '/_add/:model',
icon: 'add',
isMain: true
},
{
label: 'Exporter en CSV',
url: '/_export/:model',
icon: 'cloud_download'
},
{
label: 'Accès à l\'API',
url: '/api/_index/:model',
target: '_blank',
icon: 'link'
}
],
add: [
{
label: 'Retour',
url: '/_index/:model',
icon: 'arrow_back'
}
],
edit: [
{
label: 'Retour',
icon: 'arrow_back',
url: '/_index/:model'
},
{
label: 'Supprimer',
icon: 'delete',
url: '/_delete/:model/:id'
}
]
};
var object2 = _.mergeWith(_.clone(object1), {
index: [
{
label: 'Explorateur ',
url: '/file/_folder-explorer/uploads',
target: '_blank',
icon: 'folder_open'
},
{
label: 'Ajout multiple ',
url: '/file/_add-multiple',
icon: 'library_add'
}
],
edit: [
{
label: 'Retour',
icon: 'arrow_back',
url: '/file/_index'
}
]
}, customizerMergeActions);
function customizerMergeActions(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
}
第二个对象:
var object1 = {
index: [
{
label: 'Ajouter',
url: '/_add/:model',
icon: 'add',
isMain: true
},
{
label: 'Exporter en CSV',
url: '/_export/:model',
icon: 'cloud_download'
},
{
label: 'Accès à l\'API',
url: '/api/_index/:model',
target: '_blank',
icon: 'link'
}
],
add: [
{
label: 'Retour',
url: '/_index/:model',
icon: 'arrow_back'
}
],
edit: [
{
label: 'Retour',
icon: 'arrow_back',
url: '/_index/:model'
},
{
label: 'Supprimer',
icon: 'delete',
url: '/_delete/:model/:id'
}
]
};
var object2 = _.mergeWith(_.clone(object1), {
index: [
{
label: 'Explorateur ',
url: '/file/_folder-explorer/uploads',
target: '_blank',
icon: 'folder_open'
},
{
label: 'Ajout multiple ',
url: '/file/_add-multiple',
icon: 'library_add'
}
],
edit: [
{
label: 'Retour',
icon: 'arrow_back',
url: '/file/_index'
}
]
}, customizerMergeActions);
function customizerMergeActions(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
}
问题:在“编辑”键中,我得到了相同的对象“label:'Retour'”,我想保留最后一个…如果我答对了你的问题,你想用object1变量中的相应值覆盖源对象的值,即(与函数合并的第二个参数)。因此,与其在customizerMergeActions函数中使用concat函数,不如使用
function customizerMergeActions(objValue, srcValue) {
if (_.isArray(objValue)) {
return _.merge(objValue, srcValue);
}
}
这样,“编辑”键现在将保存此对象数组
[
{label: "Retour", icon: "arrow_back", url: "/file/_index"},
{label: "Supprimer", icon: "arrow_back", url: "/_delete/:model/:id"}
]
如果要组合两个数组,需要将它们都转换为对象,并使用
标签的值作为每个数组的键。然后合并它们,并转换回数组
const-fn=(key,…objs)=>ux0.mergeWith({},…objs,(v1,v2)=>{
如果(!.isArray(v1))返回;
/**将两个数组转换为由所选键索引的对象,
使用fn合并它们(这将处理数组中的数组)
然后再转换回带有u.values()的数组**/
返回值(fn(键、.keyBy(v1,键)、.keyBy(v2,键));
});
const object1={“index”:[{“label”:“ajour”,“url”:“/\u add/:model”,“icon”:“add”,“isMain”:true},{“label”:“Exporter en CSV”,“url”:“/\u export/:model”,“icon”:“cloud\u download”},{“label”:“Accèsèl'API”,“url”:“/\API/”index/:model”,“target”,“target”:“\u blank”,“icon”:“link”;“link”],“add:[{“label”:“label”:“label”:“label”:“label”:“label”:“返回”箭头”;“编辑”{“返回”、“图标”:“返回箭头”、“url”:“/\u index/:model”}、{“标签”:“供应商”、“图标”:“删除”、“url”:“/\u delete/:model/:id”});
const object2={“index”:[{“label”:“Explorateur”,“url”:“/file/\u folder-explorer/uploads”,“target”:“\u blank”,“icon”:“folder\u open”},{“label”:“Ajout multiple”,“url”:“/file/\u add-multiple”,“icon”:“library/\u add”}],“edit”:[{“label”:“Retour”,“icon”:“arrow\u back”,“url”:“/file/\u index”}];
const result=fn('label',object1,object2);
console.log(结果);
。作为控制台包装{最大高度:100%!重要;顶部:0;}
它在控制台中工作,但您能否提供JavaScript代码而不是函数的ES5或ES6代码。我使用的是NodeJS,而不是最新版本。已更新。下次-在您的问题中说明ES5。