比较具有不同数量属性的两个数组,并使用 javascript 在条件下将第三个数组与比较值映射

compare two arrays having different number of properties and mapping a third array with compared values on condition using javascript

我有 2 个数组

var array1 = ["1", "2", "3", "4", "5", "6"]

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offid: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
]

我需要将两个数组与 offId 的值进行比较,结果数组应该是

var array3 = [
  { offId: "1", offname: "one" },
  { offId: "2", offname: "" },
  { offId: "3", offname: "three" },
  { offId: "4", offname: "four" },
  { offId: "5", offname: "" },
  { offId: "6", offname: "" },
]

我如何实现这个(数组的长度可能相同或不同)

最简单的方法是 filter() 第二个数组:

const array3 = array2.filter(v => array1.includes(v.offId));

这将遍历 array2 中的每个元素,只留下 array1 中具有 offId 的元素。

如果您需要对其进行排序,则只需在其末尾添加一个排序即可:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => b.offId > a.offId ? 1 : a.offId < b.offId ? -1 : 0);

如果您需要按数字对其进行排序(即,您希望 2 在 10 之前),那么您需要转换这些值,然后您可以减去它们:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => parseInt(b.offId) - parseInt(a.offId));

您可以 Map 并使用存储的对象或新对象。

var array1 = ["1", "2", "3", "4", "5", "6"],
    array2 = [{ offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }],
    map = array2.reduce((m, o) => m.set(o.offId, o), new Map),
    result = array1.map(offId => map.get(offId) || { offId, offname: '' });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

var array1 = ["1", "2", "3", "4", "5", "6"];

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offId: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
];

var array3 = array1.map(val => array2.filter(obj => obj.offId == val)[0] || { offId: val, offname: "" });

console.log(array3);

您可以使用 Array.reducearray1array2 创建 array3

步骤如下:

  • acc(累积数组)最初将包含空数组。
  • 使用Array.find检查curr(当前变量)是否在数组2中。
  • 如果 a.offId 匹配 curr 值,
  • Array.find 将 return 对象。
  • 如果找到obj,将obj压入acc(累加数组)
  • 否则将{offId: curr, offname: ''}推入数组

var array1 = ["1", "2", "3", "4", "5", "6"]

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offId: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
]

var array3 = array1.reduce((acc, curr) => {
  var obj = array2.find(a => a.offId === curr);
  if (obj) {
    acc.push(obj);
  } else {
    acc.push({ offId: curr, offname: ""});
  }
  return acc;
}, []);

console.log(array3);