【问题标题】:Replacing content of array on the basis of property根据属性替换数组内容
【发布时间】:2020-07-06 06:51:58
【问题描述】:

我正在开发一个角度应用程序。我有两个数组如下:

array1 = [
  {
    Name: "Jack",
    Id: "1",
    Location: "UK"
  },
  {
    Name: "Rose",
    Id: "2",
    Location: "USA"
  },
  {
    Name: "Mary",
    Id: "3",
    Location: "India"
  }
];

array2 = [
  {
    Name: "Raj",
    Id: "5",
    Location: "UK"
  },
  {
    Name: "John",
    Id: "2",
    Location: "Germany"
  },
  {
    Name: "Maria",
    Id: "3",
    Location: "Canada"
  }
];

我想要一个结果数组,如果 array1 的任何元素的“Id”与 array2 中的任何元素的“Id”匹配,则该特定“Id”的整个数据应该在 array2 中替换。所以我的 resulArray 将如下所示:

resultArray = [
  {
    Name: "Raj",
    Id: "5",
    Location: "UK"
  },
  {
    Name: "Rose",
    Id: "2",
    Location: "USA"
  },
  {
    Name: "Mary",
    Id: "3",
    Location: "India"
  }
];

所以数组1的Id=2和Id=3在array2中匹配,所以array2中Id=2和Id=3的数据被array1的数据替换。我该怎么做?

【问题讨论】:

标签: javascript angular typescript angular8


【解决方案1】:

这里需要mapfind。您可以设置一个OR 条件,如果array1 中存在值,那么将从array1 中选择对象,否则将选择current object

var array2=[ { "Name": "Raj", "Id": "5", "Location": "UK" }, { "Name": "John", "Id": "2", "Location": "Germany" }, { "Name": "Maria", "Id": "3", "Location": "Canada" }];

var array1= [{ "Name": "Jack", "Id": "1", "Location": "UK"},{ "Name": "Rose", "Id": "2", "Location": "USA"},{ "Name": "Mary", "Id": "3", "Location": "India"}];

var result = array2.map(p=>(array1.find(k=>k.Id==p.Id) || p));

console.log(result);

我希望这会有所帮助。

【讨论】:

  • 为什么这三个点在array1之前?
【解决方案2】:

您可以根据需要使用reducefind 函数

array2.reduce((acc, c) => {
  var existed = array1.find(a=>a.Id == c.Id);
  if(existed){
     c.Name = existed.Name;
  }
  return c;
}, [])

var array1= [
{
   "Name": "Jack",
   "Id": "1",
   "Location": "UK"
},
{
   "Name": "Rose",
   "Id": "2",
    "Location": "USA"
},
{
   "Name": "Mary",
   "Id": "3",
   "Location": "India"
}
]

var array2=[
 {
       "Name": "Raj",
       "Id": "5",
       "Location": "UK"
    },
    {
       "Name": "John",
       "Id": "2",
        "Location": "Germany"
    },
    {
       "Name": "Maria",
       "Id": "3",
       "Location": "Canada"
    }
];


array2.reduce((acc, c) => {
  var existed = array1.find(a=>a.Id == c.Id);
  if(existed){
     c.Name = existed.Name;
  }
  return c;
}, [])

console.log(array2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多