【问题标题】:match two Arrays and keep order of both equal匹配两个数组并保持两者相等的顺序
【发布时间】:2022-01-03 16:31:11
【问题描述】:

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

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 与 A​​rray1 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的顺序。

【问题讨论】:

  • 这样做的目的是什么?两个数组和映射。我觉得有一个更好的数据结构。
  • 并避免octal number literalsnum: 030。根据数字,它们将被解析为八进制为十进制。
  • @Thomas .. 我使用 sheetjs 库向我的 react 项目添加读取和写入 excel 功能,但我正在尝试添加从 excel 文件中读取数据并转换为 json 的功能,然后它与另一个 excel 文件中的数据匹配,然后写入该 excel 文件。
  • @Thomas.. 注意八进制数字文字
  • @Thomas..我试图实现的顺序主要是确保 Array2 正在写入 Array1 中的另一个中的 excel 工作簿。 Array1主要是给我看Array2的写顺序

标签: javascript arrays


【解决方案1】:

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

  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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多