Lodash 从另一个数组 Chain / Map 更新元素值

Lodash update element values from another array Chain / Map

如何使用 Lodash

使用另一个数组元素数据值更新数组元素值
var Master_Array [
{ Name: "Jon", Region: "North America & Caribbean" },
{ Name: "Ruan", Region: "Asia Pacific" }
]

var Regions_Map = [
{ Region: 'Europe', NewRegion: 'EMEA' },
{ Region: 'North America & Caribbean', NewRegion: 'NAC' },
{ Region: 'Asia Pacific', NewRegion: 'APAC' }
]

我认为可以这样做:

_.chain()
.mapValues( ...blá blá... )
.values()
.value();

预期结果:

var Master_Array [
{ Name: "Jon", Region: "NAC" },
{ Name: "Ruan", Region: "APAC" }
]

一个javascript解决方案

var Master_Array = [
{ Name: "Jon", Region: "North America & Caribbean" },
{ Name: "Ruan", Region: "Asia Pacific" }
];
var Regions_Map = [
{ Region: 'Europe', NewRegion: 'EMEA' },
{ Region: 'North America & Caribbean', NewRegion: 'NAC' },
{ Region: 'Asia Pacific', NewRegion: 'APAC' }
];


var result = [];
Master_Array.forEach(function(data){
  var temp = Regions_Map.filter(function(map){
    if(map.Region === data.Region){
      return map;
    }
  });
  if(temp){
  result.push({
        Name : data.Name,
        NewRegion: temp[0].NewRegion
      });
  }
});

console.log(result);

mapfind 的解决方案:

var Master_Array = [
{ Name: "Jon", Region: "North America & Caribbean" },
{ Name: "Ruan", Region: "Asia Pacific" }
];

var Regions_Map = [
{ Region: 'Europe', NewRegion: 'EMEA' },
{ Region: 'North America & Caribbean', NewRegion: 'NAC' },
{ Region: 'Asia Pacific', NewRegion: 'APAC' }
];

Master_Array = Master_Array.map((person) => ({
  Name: person.Name,
  Region: Regions_Map.find((region) => region.Region === person.Region).NewRegion
}));

console.log(Master_Array);

你不需要执行 mapValues 因为你正在迭代一个集合而不是一个对象,mapKeysmapValues 是更好的迭代对象并映射到另一个

现在,方法 1,如果你想 运行 一些东西 return 一个新的预期项目数组然后尝试 map 像这样

var EXPECTED_RESULT = _.map(Master_Array, function(item){
    var newItem = {};
    newItem.Name = item.Name;
    newItem.Region = _.find(Regions_Map, {Region: item.Region}).NewRegion
    return newItem;
});

如果你想修改现有的数组,那么只需通过 loadash 或正常的 javascript 循环遍历它,然后执行操作

_.each(Master_Array,function(item){
    item.Region = _.find(Regions_Map, {Region: item.Region}).NewRegion
} )