Javascript 如何合并包含对象的两个数组
有一个数组A:Javascript 如何合并包含对象的两个数组,javascript,arrays,merge,Javascript,Arrays,Merge,有一个数组A: let arrA = [{ name: 'twitter', active: true }, { name: 'medium', active: false }, { name: 'platinum', active: false } ]; 和阵列B: let arrB = [{ name: 'twitter', active: false
let arrA = [{
name: 'twitter',
active: true
}, {
name: 'medium',
active: false
},
{
name: 'platinum',
active: false
}
];
和阵列B:
let arrB = [{
name: 'twitter',
active: false
}, {
name: 'medium',
active: false
}
];
我怎样才能得到这样一个数组:
let newArr = [{
name: 'twitter',
active: true
}, {
name: 'medium',
active: false
},
{
name: 'platinum',
active: false
}
];
我需要newArr
中对象的active
属性等于arrA
和arrB
中对象的active
属性之间的或,其中名称
相同
arrA
和arrB
可以具有不同的长度
创建一个空数组:var newArr=[]代码>
将对象推入newArr
中,在arrA
和arrB
之间比较对象键和值
完成了
let arrA=[
{
名称:“推特”,
主动:正确
},
{
名称:'中等',
活动:错误
}
];
设arrB=[
{
名称:“推特”,
活动:错误
},
{
名称:'中等',
活动:错误
}
];
设newArr=[];
对于(变量i=0;i
创建一个空数组:var newArr=[]代码>
将对象推入newArr
中,在arrA
和arrB
之间比较对象键和值
完成了
let arrA=[
{
名称:“推特”,
主动:正确
},
{
名称:'中等',
活动:错误
}
];
设arrB=[
{
名称:“推特”,
活动:错误
},
{
名称:'中等',
活动:错误
}
];
设newArr=[];
对于(变量i=0;i 控制台日志(newArr)代码>这里有一个用于此目的的函数:
function MyFunction(firstArray, secondArray) {
firstArray = firstArray.map(e => {
if (secondArray.some(_e => _e.name === e.name))
e.active = e.active || secondArray.filter(f => f.name == e.name)[0].active;
return e;
});
return [...newA, ...arrB.filter(e => !arrA.some(s => s.name === e.name))];
}
以下是用于此目的的函数:
function MyFunction(firstArray, secondArray) {
firstArray = firstArray.map(e => {
if (secondArray.some(_e => _e.name === e.name))
e.active = e.active || secondArray.filter(f => f.name == e.name)[0].active;
return e;
});
return [...newA, ...arrB.filter(e => !arrA.some(s => s.name === e.name))];
}
这就是我的方法。使用地图
const arrA = [{
name: 'twitter',
active: true
}, {
name: 'medium',
active: false
},{
name: 'platinum',
active: false
}];
const arrB = [{
name: 'twitter',
active: false
}, {
name: 'medium',
active: false
}];
const allItems = arrA.concat(arrB);
const mergedItems = new Map();
allItems.forEach((value) => {
if (!mergedItems.get(value.name)) {
mergedItems.set(value.name, value);
} else {
value.active = value.active || mergedItems.get(value.name).active;
mergedItems.set(value.name, value);
}
});
const mergedArray = Array.from(mergedItems.values()) ;
希望有帮助 这就是我的方法。使用地图
const arrA = [{
name: 'twitter',
active: true
}, {
name: 'medium',
active: false
},{
name: 'platinum',
active: false
}];
const arrB = [{
name: 'twitter',
active: false
}, {
name: 'medium',
active: false
}];
const allItems = arrA.concat(arrB);
const mergedItems = new Map();
allItems.forEach((value) => {
if (!mergedItems.get(value.name)) {
mergedItems.set(value.name, value);
} else {
value.active = value.active || mergedItems.get(value.name).active;
mergedItems.set(value.name, value);
}
});
const mergedArray = Array.from(mergedItems.values()) ;
希望有帮助 @MuratK的可能副本。我需要合并一个对象数组而不是字符串数组。如果你能给我提供另一个相关的答案,我将结束这个问题,将标记更改为JavaScript,因为这个问题中没有任何特定于TypeScript的内容@MuratK可能是重复的。我需要合并一个对象数组而不是字符串数组。如果你能给我提供另一个相关的答案,我将结束这个问题。将标记更改为JavaScript,因为在这个问题中没有任何特定于TypeScript的内容