Javascript 组合对象数组的特定属性

Javascript 组合对象数组的特定属性,javascript,arrays,ecmascript-6,javascript-objects,Javascript,Arrays,Ecmascript 6,Javascript Objects,如果组合时第二个数组中不可用,则添加基础“默认”的默认值 var arrayOne = [{id: 1, name: 'A'},{id:2, name: 'B'},{id:3, name: 'C'},{id:4, name: 'D'},{id:5, name: 'E'}]; var arrayTwo = [{id: 1, basis: 'Online'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'}]; 一个结果应该是: var combin

如果组合时第二个数组中不可用,则添加基础“默认”的默认值

var arrayOne = [{id: 1, name: 'A'},{id:2, name: 'B'},{id:3, name: 'C'},{id:4, name: 'D'},{id:5, name: 'E'}];
var arrayTwo = [{id: 1, basis: 'Online'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'}];
一个结果应该是:

var combinedArray = [{id: 1, name: 'A', basis: 'Online'},{id:2, name: 'B', basis: 'Default'},{id:3, name: 'C', basis: 'Paper'},{id:4, name: 'D', basis: 'Referrer'},{id:5, name: 'E', basis: 'Default'}];
我们是否可以得到从fist数组中删除名称的数组的其他结果,如下所示

var combinedArray2 = [{id: 1, basis: 'Online'},{id:2, basis: 'Default'},{id:3, basis: 'Paper'},{id:4, basis: 'Referrer'},{id:5, basis: 'Default'}];
我试过了

var combinedArray = []; 
arrayOne.forEach(objOne => {
  arrayTwo.forEach(objTwo => {
    if(objOne.id === ObjTwo.id){
      combinedArray.push({...objOne,...objTwo});
    }
  });
});

如果第二个数组中的每个id只有一个对象,那么是否有任何简单、快速的方法可以获得结果数组,而无需重复两次,从而提高性能

var combinedArray = arrayOne.map(objOne => {
  let objTwo = arrayTwo.find(objTwo => {
    return objTwo.id === objOne.id
  });
  return {
    basis: 'default',
    ...objOne,
    ...objTwo
  }
});

以下是另一种方法:

var arrayOne=[{id:1,名称:'A'},{id:2,名称:'B'},{id:3,名称:'C'},{id:4,名称:'D'},{id:5,名称:'E'}];
var arrayTwo=[{id:1,base:'Online'},{id:3,base:'Paper'},{id:4,base:'referer'}];
函数组数组(arr1、arr2){
返回arr1.map(e=>{
让element=arr2.find(elem=>elem.id==e.id);
e['basis']=element?element['basis']:'Default';
返回e;
});
}

log(groupArrays(arrayOne,arrayTwo))另一种方法是使用id作为键创建基值的映射,并在第一个数组的映射中查找这些值

constbmap=newmap(arr2.Map(e=>[e.id,e.basis]))
const res=arr1.map(e=>({…e,基:bMap.get(e.id)| |'Default'}))
console.log(res)

var arr1=[{id:1,名称:'A'},{id:2,名称:'B'},{id:3,名称:'C'},{id:4,名称:'D'},{id:5,名称:'E'}];
var arr2=[{id:1,base:'Online'},{id:3,base:'Paper'},{id:4,base:'referer'}];
O(常数*n)~O(n)
的复杂度(with
n
是串联数组的长度)

const arrayOne=[
{id:1,名称:“A”},
{id:2,名称:“B”},
{id:3,名称:“C”},
{id:4,名称:“D”},
{id:5,名称:“E”},
]
常数数组two=[
{id:1,根据:“在线”},
{id:3,依据:“文件”},
{id:4,根据:“推荐人”},
]
常量查找={}
const concatArray=arrayOne.concat(arrayTwo)
concatArray.forEach((对象)=>{
lookup[obj.id]={id:obj.id,…lookup[obj.id],依据:“默认值”,…obj}
})
const res=对象值(查找)
console.log(res)
在O(n+m)时间复杂度和O(n+m)空间复杂度中

var arrayOne=[{id:1,名称:'A'},{id:2,名称:'B'},{id:3,名称:'C'},{id:4,名称:'D'},{id:5,名称:'E'}];
var arrayTwo=[{id:1,base:'Online'},{id:3,base:'Paper'},{id:4,base:'referer'}];
var obj={};
arrayOne.forEach({id,name})=>{
obj[id]={id,名称,依据:'Default'};
});
arrayTwo.forEach({id,basis})=>{
obj[id]。基准=基准;
});
让结果=对象值(obj);

控制台日志(结果)这里有一个可以同时做到这两个方面的解决方案

var arrayOne=[{id:1,名称:'A'},{id:2,名称:'B'},{id:3,名称:'C'},{id:4,名称:'D'},{id:5,名称:'E'}];
var arrayTwo=[{id:1,base:'Online'},{id:3,base:'Paper'},{id:4,base:'referer'}];
var combinedaray=arrayOne.map({id,name,basis='Default'})=>{
arrayTwo.some(obj=>(obj.id==id)和&(basis=obj.basis));
返回{id,name,basis};//带name
//返回{id,basis};//不带名称
});
控制台日志(组合阵列);

//var combinedArray=[{id:1,名称:'A',基础:'Online'},{id:2,名称:'B',基础:'Default'},{id:3,名称:'C',基础:'Paper'},{id:4,名称:'D',基础:'referer'},{id:5,名称:'E',基础:'Default'}小心:这将用值
默认值替换
基础的任何错误值。e、 g.:如果
arrayTwo
包含元素
{id:1,basis:'}
,它将被
默认值
@Wyck Agree替换,但我假设它属于上述“不可用”类别