当前位置: 首页 > 知识库问答 >
问题:

javascript - 把两个数组按照其中一个数组的顺序 进行排序?

锺离逸春
2023-06-07

将oneArr 按照 twoArr 的顺序进行排序,而且两个数组可能一样长,也可能不一样长,
twoArr 是基于oneArr选中的数据,oneArr 是接口返回的数据,

oneArr = [
    {
        "intID": 4070479,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "id",
        "strColumnDescZHCN": "ID",
        "index": 0,
        "_index": 0
    },
    {
        "intID": 4070480,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "kpi_id",
        "strColumnDescZHCN": "",
        "index": 1,
        "_index": 1
    },
    {
        "intID": 4070481,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "kpi_code",
        "strColumnDescZHCN": "xxx",
        "index": 2,
        "_index": 2
    },
    {
        "intID": 4070482,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "project_code",
        "strColumnDescZHCN": "xxxxx",
        "index": 3,
        "_index": 3
    },
    {
        "intID": 4070481,
        "sourceTableMetaId": 225373,
        "strColumnNameEN": "key_code",
        "strColumnDescZHCN": "xxxxxxxxxx",
        "index": 4,
        "_index": 4
    }
]
twoArr = [
    {
        "intID": 4070479,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "id",
        "strColumnDescZHCN": "ID",
        "index": 0,
        "_index": 0
    },
    {
        "intID": 4070480,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "kpi_id",
        "strColumnDescZHCN": "",
        "index": 1,
        "_index": 1
    },
    {
        "intID": 4070482,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "project_code",
        "strColumnDescZHCN": "xxxxx",
        "index": 3,
        "_index": 3
    },
    {
        "intID": 4070481,
        "sourceTableMetaId": 225378,
        "strColumnNameEN": "kpi_code",
        "strColumnDescZHCN": "xxxxxxx",
        "index": 2,
        "_index": 2
    }
]

共有4个答案

晋天逸
2023-06-07
const cache = {};
oneArr.sort((a, b) => {
    const aId = a.intID, bId = b.intID;
    let aIndex = cache[aId] ?? -1;
    let bIndex = cache[bId] ?? -1;
    if (aIndex < 0 || bIndex < 0) {
        for (let i = 0; i < twoArr.length; ++i) {
            const id = twoArr[i].intID;
            if (aId === id) aIndex = cache[aId] = i;
            if (bId === id) bIndex = cache[bId] = i;
            if (aIndex >= 0 && bIndex >= 0) break;
        }
    }
    return aIndex - bIndex;
});
console.log(oneArr);
宋子辰
2023-06-07
  const newArr = [];
  twoArr.forEach((twoE) => {
    oneArr.forEach((oneE) => {
      if (twoE.intID === oneE.intID) {
        newArr.push(oneE);
      }
    });
  });

  console.log(newArr);
芮安顺
2023-06-07
let order = new Map(twoArr.map((item, index) => [item.intID, index]));

oneArr.sort((a, b) => {
  let orderA = order.has(a.intID) ? order.get(a.intID) : Infinity;
  let orderB = order.has(b.intID) ? order.get(b.intID) : Infinity;
  return orderA - orderB;
});
李跃
2023-06-07
let sortIndex = twoArr.map(item => item.intID)

oneArr.sort((a, b) => sortIndex.indexOf(a.intID) - sortIndex.indexOf(b.intID))
 类似资料:
  • 问题内容: 我有多个数组,我想根据其中一个的排序顺序对所有数组进行排序,如下所示: 我希望函数执行后,数组将如下所示: 问题答案: 您可以执行以下操作:首先根据键控数组的索引的索引对它们进行索引的值对它们进行排序,然后使用: 如果要在任何类型的集合上使它通用(但仍以与std lib集合算法相同的样式返回数组): 以及带有自定义比较器的版本:

  • 我有多个数组,我想根据其中一个数组的排序顺序对所有数组进行排序,如下所示: 我预计函数执行后的数组将如下所示:

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 问题内容: 我有这样的数组 如何按return_fare asc和one_way_fare asc排序值? 我尝试了array_multisort()但最终却得到了混乱的数据。 Asort仅适用于一维数组,我需要按两个或多个值进行排序,我如何才能像SQL中那样实现此功能,按field1 asc,field2 asc排序? 问题答案: 是正确的函数,您必须以某种方式搞砸了: 如果您在PHP的手册页上

  • 问题内容: 我有一个数组数组: 需要按特定顺序进行: 3452342 5867867 7867867 1231233 我将如何去做?我之前已经对数组进行了排序,并阅读了许多其他文章,但它们始终基于比较(即valueA <valueB)。 感谢帮助。 问题答案: 您可以用来精确指示如何对数组进行排序。在这种情况下,可以在比较函数中使用该数组。 下面的示例使用a 使生活更轻松。 这项工作的关键是使要比

  • 问题内容: 我得到了一个数组(请参阅下面的数组中的一个对象),我需要使用JavaScript按名字排序。我该怎么做? 问题答案: 假设您有一个数组。您可以使用并传递一个接受两个参数并进行比较的函数(比较器) 它应该返回 如果第一个参数小于第二个参数,则为负数(应在结果数组的第二个参数之前放置) 如果第一个参数较大,则为正数(应放在第二个参数之后) 如果这两个元素相等,则为0。 在我们的情况下,如果