匹配两个数组并保持两者的顺序相等



所以我有两个长度相同但数据不完全相同的数组,如下所示:

Array1: [{name: john, num: 030}, {name: david, num: 130}, {name: john, num: 200}, {name: jane, num: 500}]
Array2: [{name: john, num: 030}, {name: david, num: 130}, {name: jane, num: 500}, {name: '', num: ''}]

Array2只有num与Array1 num 匹配的元素

有没有办法确保这两个数组匹配它们的索引,即使数据与不匹配

例如,他们的索引看起来像这个

Array1: [{name: john, num: 030}, {name: david, num: 130}, {name: john, num: 200}, {name: jane, num: 500}]
Array2: [{name: james, num: 030}, {name: frank, num: 130}, {name: '', num: ''},  {name: kate, num: 500},]

这意味着它们通过索引匹配,并保持顺序。主要目标是Array2维持Array1的秩序。

根据问题中的描述,列出两个逻辑

  1. 属性num的值在每个数组中都是唯一的
  2. 唯一的例外是一个空字符串

我根据上面的逻辑实现了它,你可以看看它是否对你有帮助,如果逻辑不符合你的实际需求,你可以提供更多的细节和清晰的逻辑,我会调整它

const array1 = [{name: 'john', num: '030'}, {name: 'david', num: '130'}, {name: 'john', num: '200'}, {name: 'jane', num: '500'}];
let array2 = [{name: 'david', num: '130'}, {name: 'jane', num: '500'}, {name: 'john', num: '030'}, {name: '', num: ''}];
const originalLength = array2.length;
const originalArr = array2.slice(0, originalLength);
array2.length = originalLength * 2;
const provide = (arr, field, index) => {
  let result = arr.filter(a => a[field] == array1[index][field]);
  if(result.length == 0){
    result = arr.filter(a => a[field] == '');
  }
  return result[0];
};
for(let i=0; i<array1.length ; i++)
{
  const item = provide(originalArr, 'num', i);
  array2[i] = item;
}
array2.length = originalLength;
console.log(JSON.stringify(array2));

最新更新