使用arrray元素从对象数组中找到一个对象并将其替换

问题描述 投票:0回答:1

假设我有两个对象数组。

var arr1= [
  {
    pid: [ '1967', '967' ],
  },
  {
    pid: [ '910', '1967', '967' ],
  },
  {
    pid: [ '967' ],
  }
]

var arr2 = [ 
{ _id: '967', name: 'test pid' }, 
{ _id: '1967', name: 'test one test' },
{ _id: '910', name: 'this is test name' }  
]

有什么方法可以使用来自arr1的id并替换arr1.pid的元素从array2中找到_id和名称。如下所示

arr1 = [
      {
        pid: [ { _id: '1967', name: 'test one test' }, { _id: '967', name: 'test pid' }],
      },
      {
        pid: [ { _id: '910', name: 'this is test name' }, { _id: '1967', name: 'test one test' }, { _id: '967', name: 'test pid' } ],
      },
      {
        pid: [ { _id: '967', name: 'test pid' } ],
      }
    ]

到目前为止,我已经完成了以下工作

for (var i = 0; i < arr1.length; i++){
  var pids = arr1[i].pid
  for(var j = 0; j<pids.length; j++){
    var result = arr2.filter(obj => {
      return obj._id === pids[j]
    })
    console.log(result) //can not push this into arr1['pid']
  }
}
javascript arrays object
1个回答
0
投票

您可以map它,在其中您可以从第二个数组中找到elemenet:

var arr1= [ { pid: [ '1967', '967' ], }, { pid: [ '910', '1967', '967' ], }, { pid: [ '967' ], }];
var arr2 = [ { _id: '967', name: 'test pid' }, { _id: '1967', name: 'test one test' },{ _id: '910', name: 'this is test name' } ];


var result = arr1.map(k=>{
  k.pid = k.pid.map(p=>arr2.find(n=>n._id==p));
  return k;
});

console.log(result);

0
投票

这可以通过制作一个由arr2值索引的_id版本,然后根据Object.assign中的Object.assign值使用pid将适当的值复制到输出中来解决。 :

arr1
© www.soinside.com 2019 - 2024. All rights reserved.